我已经阅读了有关POCO在Enttity框架中的一些文章,但仍不明白我可以使用它。 POCO如何使我的项目受益?我可以使用POCO做什么?
回答
“普通旧Clr对象”的POCO标准。它指的是一种ORM体系结构,其中用于持久化和加载数据存储中的数据的所有工作都由系统完成,而对象本身不知道正在发生什么。这意味着ORM可以完全支持没有以任何方式修改ORM的对象。支持POCO持久化的ORM不要求你的类从任何特定的基类继承,实现任何接口,甚至标记具有任何属性的方法。与此完全相反(有时称为数据访问对象 - 或DAO)是当所有存储都由对象本身处理时,它完全知道如何序列化和存储自身以及如何在需要时加载自身。在这种情况下,对象应该纯粹用于传输数据,而不应表示系统的任何业务逻辑。
实际上,这两个情况在任何一端都是更多的光谱。许多ORM位于中间的某个位置,需要持续性在课堂外部进行处理,但通常还需要在课程上实施一些元数据或接口以帮助解决问题。
EF(v1)不支持POCO。对象必须实现各种接口(以提供属性值更改通知等)以便框架可持久化。我相信有addon frameworks试图增加对EF的POCO支持,但我不知道它们有多成功。 EF in .net 4.0将拥有POCO支持。
POCO通常被认为是好的,因为它允许关注的强烈分离。您可以定义您的数据对象,以便完全不知道将用于存储它们的机制。 (因此,将来可以轻松地将存储机制转换为不同的东西)。这也意味着您不必考虑用于存储数据库/框架的数据对象来设计数据对象。
我相信你对DTO的定义是错误的 - 它们应该和POCO/POJO很相似。 DTO是一种无行为的存储对象。 也许你正在考虑DAO(数据访问对象)? – 2009-10-29 23:44:16
@Bryan:是的,谢谢= :) – 2009-10-29 23:48:43
POCO只是“普通旧CLR对象”。这只是一个标准课程,任何标准课程。
就EF而言,人们指的是能够配置EF来将自己的类(不是由EF直接生成)存储到数据库中。
POCO是设计用于在您的应用程序内传输数据的类(即将数据从数据层移动到UI层)。它们还将应用程序的结构与数据库的架构分离。
在小型项目上这不是什么大问题,但随着项目的发展,对象模型(您如何设计POCO)往往偏离数据库模式。
.NET中通常使用的其他方法是DataTable和DataSet。通常使用列名称检索数据。这会让你在数据库中做列名。如果数据库中的列名发生更改,则代码中断。
我很不喜欢把POCO叫做DTO。抱歉。 :) – 2009-10-29 23:30:47
POCO只是一个普通的类,没有添加接口或基类来使它与数据库层(在这种情况下)一起工作。
优点是: 1)不依赖于特定的数据库层,所以你可以将它换成一个更好的(即NHibernate),而不需要修改除数据库层之外的其他任何东西。
2)它更容易对单元测试你的类。 3)没有锅炉板代码来通知当财产已经改变等只是简单的getter和setter。
Idealy你的域对象是从ORM加载,而不必在它是如何加载,变化是如何跟踪任何表示或对象它是如何保存等
NHibernate的在这做了很好的工作,唯一的要求是你必须使所有的属性/方法变成虚拟的,这比任何硬性依赖关系都要好很多。
- 1. 我不能用keytool做什么,我可以用OpenSSL做什么?
- 2. 我为什么要使用POCO?
- 3. 使用日期时,我可以用零值做什么?
- 4. 什么是web.xml文件,我可以用它做什么?
- 5. 你无法用Angular.js做什么,你可以用jQuery做什么
- 6. 我可以使用我的应用以外的plist文件做什么?
- 7. webkit可以做什么?
- 8. Merlin Agent可以做什么?
- 9. 什么是MD5CryptoServiceProvider,它可以做什么?
- 10. R的class.ind()函数做什么?我什么时候可以使用它?
- 11. 我可以用我的旧iPhone做什么
- 12. 有人可以告诉我我可能会做错什么
- 13. 你可以用AppleScript做什么?
- 14. 为什么当我在primefaces中使用fileupload时,我可以做ajax调用?
- 15. CursorAdapter有什么我可以使用的?
- 16. 我什么时候可以使用AppDomain?
- 17. 微软 - 我可以用免费软件做什么
- 18. 我可以用PHP的流做什么样的酷东西?
- 19. 我们可以用telnet做的所有事情是什么?
- 20. 我可以用openslack中的堆栈做什么
- 21. 使用POCO比DataTables有什么优势?
- 22. Poco库使用什么版本的OpenSSL?
- 23. 可以告诉我我做错了什么吗?
- 24. 我可以做些什么来优化我的linq查询吗?
- 25. 什么__contains__做什么,可以调用__contains__功能
- 26. “Class POCO”是什么?
- 27. 什么可以使用rakefiles?
- 28. 什么是BigInteger,我们什么时候可以使用它?
- 29. updateAppWidget函数可以做什么?
- 30. CALayer代表可以做什么?
一个POCO或多或少只是一个简单的类来重新从数据库中的数据换句话说它的DC(数据容器) – Peter 2009-10-29 23:21:12