数据传输对象、领域对象和仓库

8
我正在尝试弄清楚它们是如何协同工作的。我知道DTO基本上只是一个数据容器,用于在域对象之间传递到表单等地方。域对象是否包含DTO,或者DTO和域对象是否恰好具有完全相同的属性,需要手动映射?
如果我在服务中公开我的DTO类型,如何在客户端上使用getter和setter而不创建每个get/set操作的往返?我知道你可以有一个长构造函数,但如果你有超过7个属性,那会变得很丑陋。
实现存储库模式时,我传递DTO还是域对象?
2个回答

4
  • 数据传输对象(DTO)和领域对象应该分开。
  • 需要一个映射器,将DTO映射到领域对象,将领域对象映射到DTO。这个映射器应该是一个接口的实现,使用反射来映射对象之间的关系。
  • 仓库应该是一个服务,返回领域对象,它们本身也应该是服务。
  • 如果DTO是通过Web服务公开的类,则创建的WSDL将属性定义为元素,代理在另一端创建时只会在客户端上运行getter / setter属性,因此getter和setter不会导致往返。
  • 即使您只在DTO中创建了一个公共变量,代理也将被实现为getter和setter。

1

我认为最好让DTO包含对Domain对象的引用,这样DTO的使用者就可以开始使用Domain对象。话虽如此,如果DTO的使用者不能改变Domain对象,您可能需要让DTO包含封装在Domain对象中的值。这可能很困难,因为您可能需要对Domain对象进行深度复制。

我不确定为什么将DTO类型公开为服务会导致使用其getter/setter进行往返。如果服务是远程服务,返回的DTO无论如何都会被序列化,您的getter/setter将获得值的副本。如果服务不是远程服务,则做一个“往返”似乎并没有太大的惩罚,因为客户端和服务在同一进程空间中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接