代码之家  ›  专栏  ›  技术社区  ›  pdiddy

向客户机发送数据的最佳实践是什么:POCO或DTO?

  •  24
  • pdiddy  · 技术社区  · 14 年前

    我正在使用EF4和POCO启动一个项目。

    向客户机发送数据的最佳实践是什么?我应该发送POCO还是应该使用DTO?

    在将实体(与上下文断开连接)发送到客户端时,我是否应该注意到任何问题?

    是否建议将POCO发送到客户层?

    4 回复  |  直到 8 年前
        1
  •  12
  •   Scott Arrington    14 年前

    对我来说,使用EF4和Poco的一个主要原因是 需要 DTO的。我可以理解使用DTO来处理传统的EDMX文件,其中您的实体非常膨胀,但事实并非如此。

    显然,您的POCO需要是可序列化的,但实际上不应该有任何特定于发送POCO实体的问题,这些问题也不会出现在DTO中。

        2
  •  21
  •   Ɖiamond ǤeezeƦ    8 年前

    我相信我们在这里混合了两个彼此没有关系的定义。

    DTO或数据传输对象是一种设计模式,您可以使用它在层之间传输数据,而且它们也没有行为。马丁·福勒很好地解释了这一点: http://www.martinfowler.com/eaaCatalog/dataTransferObject.html

    另一方面,我们有poco或普通的旧clr对象。但是要谈论POCO,我们必须知道它从何处开始,即POJO或普通的Java对象。马丁·福勒和两个合伙人创造了这个词,他在这里解释了这个词: http://www.martinfowler.com/bliki/POJO.html

    所以Poco可以有行为和你想要的一切。它们是你在日常基础上写的相同的普通类,它们只是给它们起了这个名字,用一种简单易记的方式来称呼它们。

    在你的第二个问题中,我认为最好的方法和我一直追求的方法是将DTO从业务层发送到所有使用它的东西(例如:你的服务、网站、桌面应用、移动应用等)。这是因为在大多数情况下,它们没有行为,也不只是属性,因此它们重量轻,理想情况下可用于服务,当然,它们不会显示您的业务中的敏感数据。

    也就是说,如果您打算使用DTO,我可以建议您下载EntitiesToDTOS,这是一个实体框架DTO到生成器,我刚刚在CodePlex上发布过,它是免费的、开源的。去 http://entitiestodtos.codeplex.com

        3
  •  1
  •   Ray    13 年前

    我和上面的观点有点不同。 我相信DTO或ViewModel对于服务器层的外部仍然是必需的。 在实际应用中,有几个视图层只需要一个域对象,即几乎每个视图都需要多个域对象。 所有这些域对象都包装在一个DTO或ViewModel类中。 这就是为什么我坚持DTO或ViewModel仍然是必需的,即使它们是POCO。

        4
  •  0
  •   bufferz    14 年前

    我会考虑将EF4实体、业务模型和视图模型集成到一起。例如,他们已经实现了现成的propertychanged。如果需要,分部类可以提供自定义功能。在我看来,用您自己的安全层镜像实体会造成不必要的工作和维护。

    我相信商业逻辑和其他一切的分离。然而,在EF4的情况下,这项工作已经为您完成了。去发疯吧。