POCO的解释

Posted

技术标签:

【中文标题】POCO的解释【英文标题】:Explanation of POCO 【发布时间】:2011-03-24 11:36:06 【问题描述】:

我想知道是否有人可以对 POCO(普通旧 CLR 对象)给出一个可靠的解释(例如)。我找到了brief explanation on Wikipedia,但它确实没有给出可靠的解释。

【问题讨论】:

【参考方案1】:

您需要提供更多详细信息,例如您计划使用 POCO 的环境。但基本思想是您将创建仅包含必要数据/代码的简单对象。这些对象不会包含(例如)框架可能需要的任何“包袱”,例如注释、额外方法、基类等。

【讨论】:

注解、额外方法、基类是C#语言的基本属性。所以我看不出有任何理由不将它们包含在 POCO 对象中......【参考方案2】:

POCO 示例:

class Person 

    public string FirstName  get; set; 
    public string LastName  get; set; 
    public string EmailAddress  get; set; 


【讨论】:

我很惊讶这可以被投票 - 这个专业/反对的,实施,利益如何? 哈哈...嗯。我已将“答案”传递给您@RPM1984。【参考方案3】:

与其称它们为POCO,我更愿意称它们为persistence ignorant objects

因为他们的工作很简单,所以他们不需要关心自己的用途或使用方式。

我个人认为 POCO 只是具有简单属性的公共类的另一个流行词(如 Web 2.0 - 不要让我开始使用它)。

我一直在使用这些类型的对象来保持业务状态。

当您开始使用诸如存储库模式、ORM 和依赖注入之类的东西时,就会真正看到 POCO 的主要好处。

换句话说 - 您可以创建一个 ORM(比如说 EF),它从 somewhere(数据库、Web 服务等)拉回数据,然后 project 这些数据到对象(PO​​CO)中。

这些对象可以进一步向下传递到应用程序堆栈到服务层,然后传递到 Web 层。

那么,如果有一天你决定切换到 nHibernate,你根本就不必碰你的 POCO,唯一需要改变的就是 ORM。

因此使用了“持久性无知”一词 - 他们不在乎自己被用于什么或如何被使用。

总结一下,优点是:

允许一种简单的数据存储机制,简化序列化/通过层传递 与依赖注入、存储库模式和 ORM 齐头并进。灵活性。 最小化复杂性和对其他层的依赖。 (高层只关心 POCO,POCO 什么都不关心)。松散耦合 简单的可测试性(域测试不需要存根)。

希望对您有所帮助。

【讨论】:

这很有意义。我喜欢你使用“流行词”这个短语。看起来好像我已经在我的项目中使用了它。我正在做的用途是使用 L2S(基本上是数据库中 10 个字段中的 4 个)提取“一些”User 数据并将它们存储在一个非常基本的“POCO”对象中。然后我序列化该对象并将其作为UserData 对象存储在 ASP.NET Auth Cookie 中。这样我以后就可以在不再次访问数据库的情况下检索它。 @rockinthesixstring - 正是我的观点。我们多年来一直在使用 POCO,它只是标记某物的另一种方式。就个人而言,我喜欢存储库模式/依赖注入和 ORM 的组合——在这种情况下,如果不使用 POCO,你会发疯的。这都是关于松散耦合的。当然我不知道你使用的是什么技术(我从我的 .NET 经验中汲取灵感) 是的,正如我在评论中所说,我使用的是 ASP.NET - 我实际上使用的是 MVC2。 我有一个存储库层、一个服务层,并且我使用 Linq to SQL 作为我的 ORM。我已经使用“POCO”在 cookie 中进行对象序列化。 @rockinthesixstring - 不错。 MVC 摇滚! (我也用这个)。

以上是关于POCO的解释的主要内容,如果未能解决你的问题,请参考以下文章

实体框架中的 POCO 是啥? [关闭]

EF中的Code First

到底啥是POCO

实体中的业务逻辑并注入 DbContext

poco怎么注册?

EF6 中的 Eager 、 Lazy 和显式加载