2009-10-29 59 views
8

我已经阅读了有关POCO在Enttity框架中的一些文章,但仍不明白我可以使用它。 POCO如何使我的项目受益?我可以使用POCO做什么?

+0

一个POCO或多或少只是一个简单的类来重新从数据库中的数据换句话说它的DC(数据容器) – Peter 2009-10-29 23:21:12

回答

21

“普通旧Clr对象”的POCO标准。它指的是一种ORM体系结构,其中用于持久化和加载数据存储中的数据的所有工作都由系统完成,而对象本身不知道正在发生什么。这意味着ORM可以完全支持没有以任何方式修改ORM的对象。支持POCO持久化的ORM不要求你的类从任何特定的基类继承,实现任何接口,甚至标记具有任何属性的方法。与此完全相反(有时称为数据访问对象 - 或DAO)是当所有存储都由对象本身处理时,它完全知道如何序列化和存储自身以及如何在需要时加载自身。在这种情况下,对象应该纯粹用于传输数据,而不应表示系统的任何业务逻辑。

实际上,这两个情况在任何一端都是更多的光谱。许多ORM位于中间的某个位置,需要持续性在课堂外部进行处理,但通常还需要在课程上实施一些元数据或接口以帮助解决问题。

EF(v1)不支持POCO。对象必须实现各种接口(以提供属性值更改通知等)以便框架可持久化。我相信有addon frameworks试图增加对EF的POCO支持,但我不知道它们有多成功。 EF in .net 4.0将拥有POCO支持。

POCO通常被认为是好的,因为它允许关注的强烈分离。您可以定义您的数据对象,以便完全不知道将用于存储它们的机制。 (因此,将来可以轻松地将存储机制转换为不同的东西)。这也意味着您不必考虑用于存储数据库/框架的数据对象来设计数据对象。

+1

我相信你对DTO的定义是错误的 - 它们应该和POCO/POJO很相似。 DTO是一种无行为的存储对象。 也许你正在考虑DAO(数据访问对象)? – 2009-10-29 23:44:16

+1

@Bryan:是的,谢谢= :) – 2009-10-29 23:48:43

5

POCO只是“普通旧CLR对象”。这只是一个标准课程,任何标准课程。

就EF而言,人们指的是能够配置EF来将自己的类(不是由EF直接生成)存储到数据库中。

-5

POCO是设计用于在您的应用程序内传输数据的类(即将数据从数据层移动到UI层)。它们还将应用程序的结构与数据库的架构分离。

在小型项目上这不是什么大问题,但随着项目的发展,对象模型(您如何设计POCO)往往偏离数据库模式。

.NET中通常使用的其他方法是DataTable和DataSet。通常使用列名称检索数据。这会让你在数据库中做列名。如果数据库中的列名发生更改,则代码中断。

+1

我很不喜欢把POCO叫做DTO。抱歉。 :) – 2009-10-29 23:30:47

1

POCO只是一个普通的类,没有添加接口或基类来使它与数据库层(在这种情况下)一起工作。

优点是: 1)不依赖于特定的数据库层,所以你可以将它换成一个更好的(即NHibernate),而不需要修改除数据库层之外的其他任何东西。

2)它更容易对单元测试你的类。 3)没有锅炉板代码来通知当财产已经改变等只是简单的getter和setter。

Idealy你的域对象是从ORM加载,而不必在它是如何加载,变化是如何跟踪任何表示或对象它是如何保存等

NHibernate的在这做了很好的工作,唯一的要求是你必须使所有的属性/方法变成虚拟的,这比任何硬性依赖关系都要好很多。

相关问题