POCO=普通的旧CLR(或更好的:类)对象
DTO=数据传输对象
在这post篇文章中有一点不同,但坦率地说,我读到的大多数博客都以定义DTO的方式描述POCO:DTO是用于在应用程序的各个层之间移动数据的简单数据容器.
POCO和DTO是一回事吗?
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.