263

有人可以定义“POCO”的确切含义吗?我越来越频繁地遇到这个词,我想知道它是否只是关于普通类还是意味着更多?

4

11 回答 11

223

“普通的旧 C# 对象”

只是一个普通类,没有描述基础设施问题的属性或您的域对象不应该拥有的其他职责。

编辑 - 正如其他答案所述,它在技术上是“普通旧 CLR 对象”,但我像 David Arno 评论一样,更喜欢“普通旧类对象”以避免与特定语言或技术的联系。

澄清:换句话说,它们不是从一些特殊的基类派生的,也没有为它们的属性返回任何特殊类型。

请参阅下面的每个示例。

POCO 示例:

public class Person
{
    public string Name { get; set; }

    public int Age { get; set; }
}

不是 POCO 的示例:

public class PersonComponent : System.ComponentModel.Component
{
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public string Name { get; set; }

    public int Age { get; set; }
}

上面的例子既继承自一个特殊的类来赋予它额外的行为,也使用一个自定义属性来改变行为......两个类都存在相同的属性,但一个不再只是一个普通的旧对象。

于 2008-10-30T12:31:20.040 回答
51

大多数人都说过——Plain Old CLR Object(相对于早期的 POJO——Plain Old Java Object)

POJO 来自 EJB,它要求您从特定的父类继承诸如值对象之类的东西(您从 ORM 或类似的查询中返回的内容),所以如果您想从 EJB 迁移(例如春天),你被塞满了。

POJO 只是不强制继承或任何属性标记以使它们在您使用的任何框架中“工作”的类。

POCO 是相同的,除了在 .NET 中。

通常,它将围绕 ORM 使用 - 较旧的(和一些当前的)要求您从特定的基类继承,这将您与该产品联系起来。较新的没有(nhibernate 是我知道的变体) - 你只需创建一个类,在 ORM 中注册它,你就可以离开了。容易得多。

于 2008-10-30T13:15:33.913 回答
29

我可能错了..但无论如何,我认为 POCO 是普通的旧CLR 对象,它来自 POJO 普通的旧 Java 对象。POCO 是一个保存数据且没有行为的类。

这是一个用 C# 编写的示例:

class Fruit 
{
    public Fruit() { }

    public Fruit(string name, double weight, int quantity) 
    {
        Name = name;
        Weight = weight;
        Quantity = quantity;
    }

    public string Name { get; set; }
    public double Weight { get; set; }
    public int Quantity { get; set; }

    public override string ToString() 
    {
        return $"{Name.ToUpper()} ({Weight}oz): {Quantity}";
    }
}
于 2016-07-07T19:42:16.597 回答
9

POCO 代表“普通旧 CLR 对象”。

于 2008-10-30T12:32:52.020 回答
8

在 .NET 中,POCO 是一个“普通的旧 CLR 对象”。它不是“普通的旧 C# 对象”...

于 2015-02-13T16:20:49.377 回答
7

添加其他答案,POxx 术语似乎都源于 POTS(普通旧电话服务)。

POX 用于定义简单(普通的旧)XML,而不是与 REST、SOAP 等相关的复杂的多层内容,是一个有用且隐约有趣的术语。PO(插入选择的语言)O 术语已经使这个笑话变得很淡了。

于 2008-10-30T12:38:36.080 回答
5

在 Java 领域,“PO”通常意味着“普通旧”。其余的可能很棘手,所以我猜你的例子(在 Java 的上下文中)是“普通的旧类对象”。

其他一些例子

  • POJO(普通的旧 java 对象)
  • POJI(普通的旧java接口)
于 2008-10-30T12:32:40.490 回答
3

有趣的。我所知道的唯一与编程有关并包含 POCO 的是POCO C++ 框架

于 2008-11-16T06:41:58.683 回答
2

在 WPF MVVM 术语中,POCO 类是不触发 PropertyChanged 事件的类

于 2014-01-01T08:22:39.990 回答
2

虽然我确信 POCO 对这里 99.9% 的人来说意味着普通旧类对象或普通旧 C 对象,但 POCO 也是 Animator Pro (Autodesk) 内置的脚本语言。

于 2016-07-18T14:36:11.973 回答
0

POCO 是一个普通的旧 CLR 对象,它代表应用程序在其问题域方面的状态和行为。它是一个纯类,没有继承,没有任何属性。例子:

public class Customer
{
    public int Id { get; set; }

    public string Name { get; set; }
}
于 2020-01-25T04:04:35.523 回答