我见过很多与将DTO映射到域对象相关的问题,但我觉得他们没有回答我的问题。我以前用过很多方法,也有自己的看法,但我正在寻找更具体的方法。
情况:
我们有很多领域对象。我们正在使用 CSLA 模型,因此我们的域对象可能非常复杂,并且它们包含自己的数据访问权限。你不想在电线上传递这些。我们将编写一些新服务,这些服务将以多种格式(.Net、JSON 等)返回数据。出于这个(和其他原因),我们还创建了一个精简的数据传输对象以在网络上传递。
我的问题是:DTO 和 Domain 对象应该如何连接?
我的第一反应是使用Fowler,DTO 模式类型的解决方案。我已经看过很多次了,这对我来说是正确的。域对象不包含对 DTO 的引用。调用外部实体(“映射器”或“组装器”)从域对象创建 DTO。通常在域对象端有一个ORM。这样做的缺点是“映射器”对于任何实际情况都会变得极其复杂,并且可能非常脆弱。
提出的另一个想法是域对象“包含” DTO,因为它只是一个精益数据对象。域对象属性将在内部引用 DTO 属性,并且可以在需要时返回 DTO。我看不出这有什么问题,但感觉不对。我看过一些文章,使用NHibernate的人似乎使用了这种方法。
还有其他方法吗?以上方法之一值得使用吗?如果是或不是,为什么?