C# 我应该在哪里将实体转换为DTO';s
我的架构如下所示:C# 我应该在哪里将实体转换为DTO';s,c#,domain-driven-design,C#,Domain Driven Design,我的架构如下所示: 领域 实体 接口 DTOs 基础设施 奥姆 存储库 服务 网络服务 我想用AutoMapper转换它。我希望我的服务层只知道DTO,所以我猜我会让我的接口和存储库返回转换后的DTO。至于另一个方向,我假设我的存储库将采用DTO并转换为实体?我是在这里的正确路径上还是在左边的字段中?您的服务层应该返回实体,而您的表示层(控制器所在的imho)应该将实体转换为映射到您的用户界面(DTO)的对象。当然,这也意味着您的存储库将返回普通实体 不要忘记只创建一次映射。创建
- 领域
- 实体
- 接口
- DTOs
- 基础设施
- 奥姆
- 存储库
- 服务
- 网络服务
我想用AutoMapper转换它。我希望我的服务层只知道DTO,所以我猜我会让我的接口和存储库返回转换后的DTO。至于另一个方向,我假设我的存储库将采用DTO并转换为实体?我是在这里的正确路径上还是在左边的字段中?您的服务层应该返回实体,而您的表示层(控制器所在的imho)应该将实体转换为映射到您的用户界面(DTO)的对象。当然,这也意味着您的存储库将返回普通实体 不要忘记只创建一次映射。创建一个引导程序或创建所有映射的东西,然后只需在控制器中调用Mapper.Map()
- 从存储库获取聚合并将其映射到POCO DTO(可能使用AutoMapper)
- 创建一个精简数据访问层,专门用于直接向DTO查询数据
在任何情况下,都应该是应用层(web服务)将域实体转换为DTO。Yep。您应该使用您的实体(我想是代表您的模型的实体),直到您的最后一个受控层。但这是我的问题,我的实体使用Iesi.Collections.ISet,它不能为我的服务层WCF服务序列化。我明白你的意思,但对于我的WCF服务层,这会改变事情吗?我不同意,除非他的体系结构保证实体遵循域模型而不是数据模型。我尝试遵循域优先的方法。如果你先做域,那么你不需要DTO,您需要视图模型,这些模型应该映射到您的接口层,在您的情况下,接口层是服务层,因此我同意Leon的观点。谁将使用您的服务以及如何使用?我的服务将像API一样被访问到我的内部系统中。有些是内部的,但在将来,外部系统将连接。如果它在未来或内部,服务很容易连接和入侵,您的公开端点(web服务)应该返回安全DTO,它不会包含整个实体。因此,正确的解决方案可能是映射到我的服务层的DTO,但在我的存储库中,映射到ViewModelsYes,服务总是返回DTO,因为我们只会根据身份验证和用户访问发送信息。然而,我们使用动态序列化来避免DTO的生成,这很痛苦。动态序列化只根据登录的用户序列化实体的一部分,这样的规则在数据库本身和代码外进行编码。这似乎是对我来说最好的方法。谢谢