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

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

【问题讨论】:

    标签: poco


    【解决方案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 摇滚! (我也用这个)。
    猜你喜欢
    • 1970-01-01
    • 2017-05-13
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多