Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在何处放置DTO<==&燃气轮机;WCF服务中的实体转换器?_Wcf_Domain Driven Design_Dto_Translate - Fatal编程技术网

在何处放置DTO<==&燃气轮机;WCF服务中的实体转换器?

在何处放置DTO<==&燃气轮机;WCF服务中的实体转换器?,wcf,domain-driven-design,dto,translate,Wcf,Domain Driven Design,Dto,Translate,我的设计如下: 我将在我的服务层中有一个名为“ProductDTO”的类(左边的服务) 调用“更新产品(ProductDTO)”操作合同时,应调用业务逻辑层中的“更新产品”功能 在数据库(数据访问层)中有一个名为“Product”的实体,因为我使用LINQ To实体,所以在那里也有一个名为“Product”的类 我的问题是——我在哪里把“ProductDTO”翻译成“Product” 我是否应该在服务层中具有“将产品转换为产品”功能? 这似乎是最符合逻辑的答案,因为这是唯一一个知道“Produ

我的设计如下:

我将在我的服务层中有一个名为“ProductDTO”的类(左边的服务)

调用“更新产品(ProductDTO)”操作合同时,应调用业务逻辑层中的“更新产品”功能

在数据库(数据访问层)中有一个名为“Product”的实体,因为我使用LINQ To实体,所以在那里也有一个名为“Product”的类

我的问题是——我在哪里把“ProductDTO”翻译成“Product”

我是否应该在服务层中具有“将产品转换为产品”功能? 这似乎是最符合逻辑的答案,因为这是唯一一个知道“ProductDTO”是什么的层

但这意味着服务层还必须知道什么是“产品”,因此必须引用数据访问层程序集

这是正确的吗


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

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


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

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

几个问题:a.什么是“DDD”?B.我将使用LINQ-TO-EF。这是我的名字吗?还是这是我生命的一部分?C.如果我使用“LINQ-TO-EF”-DAL中还应该有什么?因为据我所知,所有实际的CRUD操作都将在BL中完成。那么DAL中有什么内容呢?