Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/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
Design patterns 域层是否是映射对象(DTO)的合适位置?_Design Patterns_Domain Driven Design_Distributed_Ddd Service - Fatal编程技术网

Design patterns 域层是否是映射对象(DTO)的合适位置?

Design patterns 域层是否是映射对象(DTO)的合适位置?,design-patterns,domain-driven-design,distributed,ddd-service,Design Patterns,Domain Driven Design,Distributed,Ddd Service,我的域层中有一些映射对象[实体],需要由我的web服务使用,它将这些映射对象公开给外部世界。这些映射对象的正确位置在哪里?您将如何构造映射对象及其正确位置 我的项目是一个MVC5.NET项目,它使用实体框架6并具有以下层: UI+应用层 域层(Entities.MappedObjects是我现在放置映射对象的地方) 基础结构层(完成所有管道和对数据库的访问)如果遵循代码优先的方法,那么域模型对象(是域模型最重要的部分)与Entities.MappedObjects相同 所以它们属于域层 在代码优

我的域层中有一些映射对象[实体],需要由我的web服务使用,它将这些映射对象公开给外部世界。这些映射对象的正确位置在哪里?您将如何构造映射对象及其正确位置

我的项目是一个MVC5.NET项目,它使用实体框架6并具有以下层:

UI+应用层 域层(Entities.MappedObjects是我现在放置映射对象的地方)
基础结构层(完成所有管道和对数据库的访问)

如果遵循代码优先的方法,那么域模型对象(是域模型最重要的部分)与Entities.MappedObjects相同

所以它们属于域层


在代码优先的方法中,您的对象与持久性无关,而在数据库优先的方法中,您失去了架构清晰模块化的灵活性,因为您的对象只是数据库表,您的持久性问题会泄漏到其他层。

如果您要将模型对象与web服务公开的DTO分离,那么您的DTO(您的
MappedObjects
)应该位于服务层而不是域层


如果
MappedObjects
是您的实际域对象,并且您不介意通过服务将您的域泄漏给“外部世界”,那么您现在拥有它们的地方就可以了。

那么您的意思是,如果我将Person类作为我的实体之一MappedPerson类(Person的精简版本)将位于Person类本身的确切位置?我认为我们不同意一种普遍存在的语言:-),我认为您指的是通过映射实体“映射到数据库表的域对象”,而据我所知,您指的是DTO对象。如果是这样,那么我认为服务层就是正确的位置。请查看DDD体系结构中涉及的层的良好解释。我的MappedObject是实际(不应包含所有数据)对象的精简版本。您是在暗示这些映射对象需要位于基础结构层的服务部分,还是有自己的专用层,称为服务层?不,您是在混合服务和基础结构。通常有一个服务层,在这种情况下,它将对应于您的web服务和相关内容,例如
MappedObjects
。有一堆横切的东西不是一个层(因此横切的名称),比如日志记录,这就是你可能称之为“管道”。此外,数据库访问不会进入基础设施,而是进入数据访问层