【问题标题】:DTOs vs Serializing Persisted EntitiesDTO 与序列化持久化实体
【发布时间】:2009-11-07 00:22:16
【问题描述】:

我很想知道社区对这个主题的看法。我最近遇到了 NHibernate/WCF 场景(实体在服务层持久化)的问题,并意识到我可能走错了方向。

我的问题很明显,当在 Web 服务(在这种情况下为 WCF)后面使用持久对象图(NHibernate、LINQ to SQL 等)时,您更愿意通过网络发送这些实体吗?或者您会创建一组更轻的 DTO(无循环引用)吗?

【问题讨论】:

    标签: c# web-services dto object-persistence


    【解决方案1】:

    DTO。使用 AutoMapper 进行对象到对象的映射

    【讨论】:

      【解决方案2】:

      我之前曾多次遇到过这种情况,并且可以根据双方的经验发言。最初我只是序列化我的实体并按原样发送它们。从功能的角度来看,这工作得很好,但我越是研究它,我就越意识到我发送的数据超出了我的需要,并且我失去了在任何一方改变实现的能力。在随后的服务应用程序中,我已经创建了 DTO,其唯一目的是从 Web 服务获取数据和从 Web 服务获取数据。

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

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

      【讨论】:

        【解决方案3】:

        我几乎总是创建 dtos 来通过网络传输并在我的服务器和客户端上使用更丰富的实体。在客户端,他们将拥有一些通用的表示逻辑,而在服务器上,他们将拥有业务逻辑。 dto 和实体之间的映射可能很愚蠢,但它需要发生。 AutoMapper 等工具可为您提供帮助。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

          • 我同意。这实际上是一个内部服务(我们的 Intranet 应用程序使用它,我知道我没有指定),但这个概念是正确的。
          【解决方案5】:

          我一直在通过网络发送 nHibernate 对象时遇到问题。特别是如果您使用 ActiveRecord 模型。和/或如果您的对象与会话有联系(恶心)。另一个令人讨厌的结果是 nHibernate 可能会尝试在方法的入口处加载对象(在您到达之前),这也可能导致问题。

          所以...在这里收到消息?问题,问题问题...DTO 一路走来

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-07-16
            • 1970-01-01
            • 2011-06-07
            • 1970-01-01
            • 2015-11-15
            • 2015-04-08
            • 1970-01-01
            相关资源
            最近更新 更多