POCO=普通的旧CLR(或更好的:类)对象

DTO=数据传输对象

在这post篇文章中有一点不同,但坦率地说,我读到的大多数博客都以定义DTO的方式描述POCO:DTO是用于在应用程序的各个层之间移动数据的简单数据容器.

POCO和DTO是一回事吗?

推荐答案

POCO遵循OOP的规则.它应该(但不一定)有状态and行为.POCO源于马丁·福勒(Martin Fowler)[anecdote here]创造的POJO.他使用术语POJO使拒绝使用框架密集的EJB实现变得更加性感.POCO应在中的相同上下文中使用.网不要让框架支配对象的设计.

DTO的唯一目的是转移状态,不应该有任何行为.有关此模式的用法示例,请参阅Martin Fowler的explanation of a DTO.

区别在于:POCO describes an approach to programming(优秀的老式面向对象编程),其中DTO is a pattern用于使用对象"传输数据".

虽然你可以像对待DTO一样对待POCO,但如果你这样做的话,你就有创建anemic domain model的风险.此外,在 struct 上存在不匹配,因为DTO应该被设计为传输数据,而不是代表业务领域的真实 struct .这样做的结果是,DTO往往比实际域更平坦.

In a domain of any reasonable complexity, you're almost always better off creating separate domain POCOs and translating them to DTOs. DDD (domain driven design) defines the anti-corruption layer (another link here, but best thing to do is buy the book), which is a good structure that makes the segregation clear.

.net相关问答推荐

使用托管身份而不是检测密钥配置Application Insights

是否有内置方法将 nuget 包引用为 csproj 中的文件?

从 Contentful 中的富文本元素中获取价值?

out 和 ref 可以用作临时变量吗?

如何确定计时器是否正在运行?

为什么 .NET 中的 System.Version 定义为 Major.Minor.Build.Revision?

整个命名空间的SuppressMessage

如何在 C# 中创建表达式树来表示String.Contains("term")?

(C# 7.2)私有保护修饰符的用例是什么?

如何等到远程 .NET 调试器附加

LINQ 性能常见问题解答

数据库架构更改后更新 LINQ to SQL 类的最佳方法

什么是 project.lock.json?

Visual Studio 类图不显示关系

如何防止任务的同步延续?

使用+运算符的字符串连接

System.ServiceModel 在 .NET Core 项目中找不到

在 try/catch/finally 中等待的一个很好的解决方案?

您可以将 Microsoft Entity Framework 与 Oracle 一起使用吗?

在构建事件命令行中放置注释的正确方法?