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相关问答推荐

为什么Regex.Escape支持数字符号和空格?

DotNet COM初始化问题

当数据大量分布在微服务中时,我应该如何设计后端?

.NET Core 中的微服务

从 byte[] 创建 zip 文件

根源是什么?

将 DataRowCollection 转换为 IEnumerable

如何让 DateTimePicker 显示一个空字符串?

调用委托与方法的性能

.NET - 实现捕获所有异常处理程序的最佳方法是什么

支持 HTTPS 的 Httplistener

如何根据默认样式创建样式?

.Net 中 AOP 的最佳实现是什么?

ToLowerInvariant() 有什么问题?

我应该绑定到 ICollectionView 还是 ObservableCollection

Environment.GetFolderPath(...CommonApplicationData) 在 Vista 上仍然返回C:\Documents and Settings\

如果选中,则更改列表框项的 WPF DataTemplate

如果锁定的对象内部发生异常,它会保持锁定状态吗?

使用没有catch块的try-finally块

什么时候使用 Tuple 和 KeyValuePair 比较好?