凡置于WCF服务DTO <==>实体翻译?(Where to place DTO <

2019-07-29 02:48发布

我有以下的设计: 我的设计 我的设计http://s15.postimg.org/3zha8rzqh/Design_Idea.png

我有一个叫做“ProductDTO”我的服务层 (左服务)类。

当“更新产品(ProductDTO)”承包经营合同被称为-它应该调用业务逻辑层中的“更新产品”功能。

在数据库(“数据访问层”)有一个名为“产品”的实体,因为我使用LINQ到实体我也会有一类被称为有“产品”。

我的问题是 - 我在哪里从“ProductDTO”到“产品”翻译?

我应该在服务层中的“Translate_ProductDTO_To_Product”功能? 这似乎是最逻辑的答案,因为这是知道什么“ProductDTO”是唯一的层。

但是,这意味着该服务层还必须知道什么是“产品”是,因此将不得不引用数据访问层组件。

它是否正确 ?

我认为, 服务层应该只引用业务逻辑层 ,以及商业逻辑层应该只引用数据访问层 ,而服务层应该一无所知DAL。

Answer 1:

地图的DTO到您的域实体在服务层。 你的服务层需要了解的DTO和实体是映射(和)。 我强烈建议你使用类似的工具AutoMapper进行映射,而不是手工编写。 您的服务层不应引用您的DA层(或部件)。 您的BL以后需要引用您的DA层坚持的实体。 编辑:您的企业的entites可能不应该是DA命名空间下。 如果您使用的是ORM工具来生成它们,请确保你把任何DDD逻辑部分类的另一半。



Answer 2:

看来你的困惑可以假设干Product在数据层类实际上是Product实体。 一般来说,在域驱动程序的设计 ,您的业务实体同居/是业务逻辑层。 通常,这些类是持久性是数据访问层(典型地使用一个对象关系映射器框架)的责任“无知”。

在实践中,您的服务将需要对域模型(业务层)和数据访问层两个引用执行有用的工作。 无论是WCF服务代码和数据访问层应取决于域模型,但该领域模型不应该有任何的数据访问层或WCF服务代码的依赖关系。



文章来源: Where to place DTO <==> Entity translator in WCF service?