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 这些数据到对象(POCO)中。
这些对象可以进一步向下传递到应用程序堆栈到服务层,然后传递到 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的解释的主要内容,如果未能解决你的问题,请参考以下文章