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