我的架构看起来像这样:
我想使用AutoMapper进行转换。我希望我的服务层只知道DTO,所以我猜我会让我的接口和我的存储库返回转换后的DTO。至于另一个方向,我会假设我的存储库将采用DTO并转换为实体?我在这里是正确的道路还是我在左外地?
答案 0 :(得分:3)
当客户端需要来自Web服务的数据时,您有两个选择:
后一种方法是我的偏好。正如我所说,域名聚合应按行为和行为设计交易。它们不是为在屏幕上显示数据而设计的。尝试将数据从正确设计的域实体(即,正确封装)映射到DTO以供数据的消费者(例如UI),这总是一个尴尬的过程。它是圆孔中的方形钉。在我看来,提供一个返回客户端所需数据的瘦数据访问层要容易得多。域模型不需要参与此过程;这只是数据。这是CQRS的基本原则。
在任何情况下,应该是将域实体转换为DTO的应用层(Web服务)。
答案 1 :(得分:1)
您的服务层应该返回实体,而您的表示层(控制器驻留在哪里)应该将实体转换为映射到您的用户界面(DTO)的对象。当然,这也意味着您的存储库将返回正常实体。
不要忘记只创建一次映射。创建一个引导程序或创建所有映射的东西,然后你只需要在你的控制器中调用Mapper.Map()。