我在我的应用程序中使用了愚蠢的业务对象。只是使用了DTO来转移对象的选定属性,但我想知道两者之间有什么区别?我无法找到任何。数据传输对象(DTO)与愚蠢的业务对象之间的区别?
回答
也许有点多余的部件之间传输数据,但我已经输入它如此嘿;)
为了简单化(很多),业务对象应该有getter/setter方法,DTO应该只有属性。业务对象需要遵守业务规则,但DTO仅用于传输数据;他们不需要遵守任何规则,应该尽可能快地设计出数据。
在像PHP这样的弱类型语言中,DTO并不总是必需的,因为可以随意为通用对象提供任意属性。尽管如此,它们仍然可以用于文档,并且可以使用强类型的函数参数。
我只会说,唯一的区别是意图,假设你的哑巴业务对象只持有状态和没有行为。
在这种情况下:
- DTO的旨在应用层
- 哑业务对象是你的域模型
其实我用DTO绑定了一个有30个字段的对象,但是我不能在我的DTO和BO本身之间找到任何区别的字段/属性。在这种情况下,DTO是否被推荐,因为我现在在项目中有冗余? – 2010-07-10 17:40:52
@Popo - 完全取决于你。什么对您的应用程序有意义?你是否以相似的能力使用这两个?他们有相同的责任吗? DTO在那里解耦? – Oded 2010-07-10 17:44:11
嗯,好的。我现在正在使用它们来减少大型BO的内存浪费。还有一件事,如果你是我,你会用DTO来达到这个目的吗? – 2010-07-10 17:49:39
当你说“愚蠢”的业务对象,你有效地使这些对象与DTO一样。使业务对象成为业务对象的是增加了验证和其他功能逻辑。当他说业务对象需要setter和getter方法时,我不同意用户“否”他们可以使用属性就好,他们只需要比任何一个更多。
一个共同的观点是业务对象应该被允许保存无效值,并且只有在试图持久化数据库时才会抛出异常,在这种情况下属性工作得很好。但是,大多数应用程序都希望在尝试发布到数据库之前向用户提供反馈。
罗克福德洛特卡的CSLA.NET方法是在业务对象上使用IsValid()
方法,该方法具有一组已分配给对象本身的规则。还有其他方法可以解决这个问题,但关键是业务对象执行验证。正如你怀疑的那样,“愚蠢的”业务对象确实只是DTO。
- 1. 在Java中的DTO(数据传输对象)和类对象之间的区别?
- 2. 获取Guice从愚蠢的数据对象创建对象
- 3. 实体,业务对象,数据传输对象和业务模型对象有什么区别?
- 4. C#中的DTO(数据传输对象)和代理对象之间的差异
- 5. 数据对象中的业务逻辑与耦合与DTO(vs.?)
- 6. 来自IIFE的对象与返回对象之间的区别
- 7. 函数对象之间的区别R
- 8. 可比对象与对象类型之间的区别
- 9. Java对象与用户定义对象之间的区别
- 10. 如何有效地使用DTO对象(数据传输对象)?
- 11. DAL与BLL之间的传输对象
- 12. DTO VS在WCF层的业务对象
- 13. 使用Access.Application对象与数据库连接之间的区别
- 14. ActionScript - “通配符”与对象数据类型之间的区别?
- 15. 抽象数据类型和对象之间的区别
- 16. WCF-代理对象,服务对象和普通类对象之间的区别
- 17. 价值对象模式和数据传输模式之间的区别
- 18. Django的,_base_manager之间的区别对象
- 19. 对象和*之间的区别?
- 20. 对象和散列之间的区别?
- 21. 对象和字典之间的区别?
- 22. 对象之间的区别(javascript和jquery)
- 23. 依赖注入 - 与数据传输对象(DTO)一起使用?
- 24. 验证DTO和业务对象
- 25. 什么是Hibernate业务对象? DTO?
- 26. AutoMapper:IDataReader和DTO对象之间的映射
- 27. 数据传输对象 - 在DTO中执行映射还是在业务对象中执行映射?
- 28. 传递对象之间的数据
- 29. 视图模型和数据传输对象之间有什么区别?
- 30. null ==对象和对象== null之间的区别
感谢您的详细回复。我现在开始掌握一些东西=)谢谢。 – 2010-07-10 17:55:58
在C#中,每个属性本质上都是一个getter/setter对。在这方面,你的答案在C#领域没有多大意义。 – Oded 2010-07-10 18:12:04
@Oded:我认为答案是有道理的。我相信他的观点是业务对象应该控制DTO包含的数据。通过使用getter和setter方法而不是属性,调用者更可能假设他们的数据正在被*处理*而不是简单地被存储。 – 2010-07-10 19:06:59