代码之家  ›  专栏  ›  技术社区  ›  Alexis Abril

DTO与序列化持久化实体

  •  5
  • Alexis Abril  · 技术社区  · 15 年前

    我很想知道社区对这个问题的看法。我最近在一个nhibernate/wcf场景中遇到了这个问题(实体一直存在于服务层),并且意识到我可能在这里走错了方向。

    我的问题很明显,当在Web服务(在本场景中为WCF)后面使用持久对象图(nhibernate、linq to sql等)时,您更喜欢通过网络发送这些实体吗?还是创建一组更轻的DTO(无循环引用)?

    5 回复  |  直到 15 年前
        1
  •  8
  •   epitka    15 年前

    DTOs。对对象到对象映射使用automapper

        2
  •  3
  •   akmad    15 年前

    我已经在这种情况下多次,可以从双方的经验说话。最初我只是将我的实体序列化并按原样发送它们。从功能的角度来看,这很好,但是我越是深入地研究它,就越能意识到我发送的数据比我需要的要多,并且我失去了在任何一方改变实现的能力。在随后的服务应用程序中,我创建了DTO,它的唯一目的是在Web服务之间获取数据。

    在任何互操作之外,必须考虑通过线路发送的所有字段对于确保我不发送不需要的或更糟的数据非常有帮助(对我来说),而不应该直接发送给客户机。

    正如其他人提到的, AutoMapper 对于实体到DTO的映射是一个很好的工具。

        3
  •  1
  •   BennyM    15 年前

    我几乎总是创建DTO来通过有线传输,并在我的服务器和客户机上使用Richter实体。在客户机上,它们将具有一些通用的表示逻辑,而在服务器上,它们将具有业务逻辑。DTO和实体之间的映射可能是愚蠢的,但需要这样做。像automapper这样的工具可以帮助您。

        4
  •  1
  •   Kevin Jones    15 年前

    如果您问我是否要将Web服务中的序列化实体发送到外部世界?那么答案肯定是否定的,如果你这样做的话,你将得到最小的互操作性。DTOS有助于通过定义一组“对象”来解决这个问题,这些对象可以用任何语言实例化,无论是使用C语言、Java、JavaScript还是其他任何东西。

        5
  •  1
  •   ryber    15 年前

    我总是在通过电线发送NHibernate对象时遇到问题。尤其是使用ActiveRecord模型时。和/或如果您的对象与会话有关联(糟糕)。另一个令人讨厌的结果是,nhibernate可能会尝试在方法的入口加载对象(在您到达之前),这也可能导致问题。

    那么……在这里得到信息?问题,问题,问题……一路前进