基础结构服务能否返回 Uncle Bob 的 The Clean Architecture(英语:The Clean Architecture)中的域实体?



考虑:

用例层定义了接口

public interface IGeocoder
{
Coordinate GetCoordinate(Address address);
}

CCD_ 1和CCD_ 2是在域层(即Bob术语中的实体层(中定义的值对象。显然,用例(interator(构造Address并将其传递给IGeocoder,期望返回Coordinate

这会违反任何干净的体系结构规则吗?我是否应该通过接口传递DTO,以便服务的实际实现不负责生成域实体?或者这样可以吗?

请注意,我看不出这与存储库(实体网关(之间有任何区别,存储库的接口也将在用例层中定义,但在周围的接口适配器层中实现:

public interface IRestaurantRepository
{
// ...
}

谁拥有基础设施服务的实现?是同一支球队吗?然后应该可以像处理存储库一样处理它;直接返回域实体。它是由不同的团队所有的吗?然后创建一个边界并传递专用的DTO可能是有益的,因为它可以减少耦合。

这一切都取决于您的"实体";是什么;DTO";是如果";实体";以及";DTO";基本上是相同的,那么传入实体不会违反任何内容。

但是,如果您的实体有一个类似address.getISOAddress((的函数,并且您的getCoordinates函数需要调用该函数以获得正确的地址/坐标,那么这将违反体系结构,因此您应该将ISOAddress传递到getCoordinations用例中。

需要记住的重要一点是,您正在处理接口、契约或抽象。如果该接口处理的是一个抽象类,那么一个确切实例的具体实现应该也不重要。重要的是,您在正确的抽象级别上有一个清晰的接口,并且您的系统是灵活的,因此实现细节可以更改,您的系统在没有重大修改的情况下仍然可以工作。

最新更新