c# - 普通旧 CLR 对象与数据传输对象

标签 c# .net poco dto

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/

相关文章:

c# - 我应该用数据传输对象包装实体吗

c# - Wix 中的自定义操作以操作字符串和设置属性

c# - Entity Framework 4.1 Code First 和 Oracle CLOB

c# - 在 C# 中将列表的模型类添加到列表的另一个模型类中的任何其他方法?

c++ - 使用带有poco的SecureStreamSocket连接TCP服务器时如何发送证书

c# - 在使用时对域对象进行更改

c# - 该类型定义在一个未被引用的程序集中,如何查找原因?

.net - 用于性能基准测试的 Visual Studio 加载项

c# - 如何在不引用 EF 的情况下识别 EF POCO 代理?

c++ - 完整的 C++ "from scratch"框架