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