POCO = 普通旧 CLR(或更好:类)对象
DTO = 数据传输对象
在此post这是有区别的,但坦率地说,我阅读的大多数博客都以定义 DTO 的方式描述了 POCO:DTO 是用于在应用程序层之间移动数据的简单数据容器。
POCO 和 DTO 是一回事吗?
最佳答案
POCO 遵循 OOP 的规则。它应该(但不是必须)具有状态和行为。 POCO 来自 POJO,由 Martin Fowler 创造 [ anecdote here ].他使用术语 POJO 作为一种方式来拒绝框架繁重的 EJB 实现。 POCO 应在 .Net 中的相同上下文中使用。不要让框架决定对象的设计。
DTO 的唯一目的是传输状态,不应有任何行为。参见 Martin Fowler 的 explanation of a DTO有关使用此模式的示例。
区别如下:POCO 描述了一种编程方法(优秀的老式面向对象编程),其中DTO 是一种模式,用于“传输数据”使用对象。
虽然您可以像对待 DTO 一样对待 POCO,但您冒着创建 anemic domain model 的风险如果你这样做。此外,在结构上存在不匹配,因为 DTO 应该设计用于传输数据,而不是代表业务领域的真实结构。这样做的结果是 DTO 往往比您的实际域更扁平。
在任何具有合理复杂性的域中,您几乎总是最好创建单独的域 POCO 并将它们转换为 DTO。 DDD(领域驱动设计)定义了 anti-corruption layer (另一个链接 here ,但最好的做法是 buy the book ),这是一个很好的结构,可以使隔离变得清晰。
关于c# - 普通旧 CLR 对象与数据传输对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/725348/