如何解决基础结构服务可以返回Bob叔叔的“清洁架构”中的域实体吗?
考虑:
用例层定义了一个接口
public interface IGeocoder
{
Coordinate GetCoordinate(Address address);
}
Coordinate
和Address
是在域层(即Bob叔叔术语中的实体层)中定义的值对象。显然,用例(交互器)构造了Address
并将其传递给IGeocoder
,期望返回Coordinate
。
这会打破任何Clean Architecture规则吗?我应该改为通过接口传递DTO,以使服务的实际实现不负责生成域实体吗?还是可以吗?
请注意,这与存储库(实体网关)之间没有任何区别,该存储库的接口也将在用例层中定义,但在周围的接口适配器层中实现:
public interface IRestaurantRepository
{
// ...
}
解决方法
谁拥有基础架构服务的实施?是同一支球队吗?然后可以像存储库一样处理它。直接返回域实体。 它是由其他团队拥有吗?然后创建边界并传递专用DTO可能会有所帮助,因为它会减少耦合。
,这一切都取决于您的“实体”是什么,以及“ DTO”是什么。 如果“实体”和“ DTO”基本相同,那么您通过传入实体就不会违反任何规则。
但是,如果您的实体具有诸如address.getISOAddress()之类的函数,并且希望您的getCoordinates函数调用该函数,以获取正确的地址/坐标,则将违反体系结构,而是应传递一个ISOAddress进入您的getCoordinates用例。
要记住的重要一点是,您正在处理接口,协定或抽象。如果该接口正在处理抽象类,则确切实例的具体实现应该也不重要。重要的是,您在正确的抽象级别上具有清晰的界面,并且系统灵活,可以更改实现细节,并且系统仍可以正常运行而无需进行重大修改。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。