2012-04-23 36 views
1

我有如下设计: My Design My Design http://s15.postimg.org/3zha8rzqh/Design_Idea.pngDTO的位置<==> WCF服务中的实体翻译器?

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

当'更新产品(ProductDTO)'操作合同被调用时 - 它应该调用业务逻辑层中的'更新产品'功能。

在数据库中('数据访问层')有一个名为'Product'的实体,因为我使用LINQ-To-Entities,所以我也会有一个名为'Product'的类。

我的问题是 - 我在哪里从'ProductDTO'翻译成'Product'?

我应该在服务层有一个'Translate_ProductDTO_To_Product'函数吗? 这似乎是最逻辑的答案,因为这是知道'ProductDTO'是什么的唯一层。

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

这是正确的吗?

我认为服务层应该只引用业务逻辑层,那业务逻辑层应该只引用数据访问层,并且该服务层应该一无所知DAL。

回答

1

将DTO映射到服务层中的域实体。您的服务层需要了解DTO及其映射到(和来自)的实体。我强烈建议你使用像AutoMapper这样的工具来做映射而不是手工制作。 您的服务层不应该引用您的DA层(或程序集)。之后您的BL将需要引用您的DA层来坚持这些实体。 编辑: 您的业务可能不应该在DA名称空间下。如果您使用ORM工具生成它们,请确保将任何DDD逻辑放在部分类的另一半中。

+0

有几个问题:A.什么是'DDD'? B.我将使用LINQ-TO-EF。这是我的DAL吗?或者这是我的DAL的一部分? C.如果我使用'LINQ-TO-EF' - DAL还有什么?因为从我的理解 - 所有的实际CRUD操作都将在BL中完成。那么在DAL中放置什么? – 2012-04-23 13:21:11

+0

DDD:http://en.wikipedia.org/wiki/Domain-driven_design – 2012-04-23 13:34:11

+0

谢谢。我的其他问题呢? – 2012-04-23 15:19:16

2

看来你的困惑可能源于假设你的数据层中的Product类实际上是Product实体。通常在domain driver design中,您的业务实体是/业务逻辑层。通常这些类是持久性的“无知”,这是数据访问层的责任(通常使用对象关系映射器框架)。

实际上,您的服务需要同时引用域模型(业务层)和数据访问层来执行有用的工作。 WCF服务代码和数据访问层都应该依赖域模型,但域模型不应该依赖于数据访问层或WCF服务代码。

相关问题