有人可以定义“POCO”的确切含义吗?我越来越频繁地遇到这个词,我想知道它是否只是关于普通类还是意味着更多?
11 回答
“普通的旧 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; }
}
上面的例子既继承自一个特殊的类来赋予它额外的行为,也使用一个自定义属性来改变行为......两个类都存在相同的属性,但一个不再只是一个普通的旧对象。
大多数人都说过——Plain Old CLR Object(相对于早期的 POJO——Plain Old Java Object)
POJO 来自 EJB,它要求您从特定的父类继承诸如值对象之类的东西(您从 ORM 或类似的查询中返回的内容),所以如果您想从 EJB 迁移(例如春天),你被塞满了。
POJO 只是不强制继承或任何属性标记以使它们在您使用的任何框架中“工作”的类。
POCO 是相同的,除了在 .NET 中。
通常,它将围绕 ORM 使用 - 较旧的(和一些当前的)要求您从特定的基类继承,这将您与该产品联系起来。较新的没有(nhibernate 是我知道的变体) - 你只需创建一个类,在 ORM 中注册它,你就可以离开了。容易得多。
我可能错了..但无论如何,我认为 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}";
}
}
POCO 代表“普通旧 CLR 对象”。
在 .NET 中,POCO 是一个“普通的旧 CLR 对象”。它不是“普通的旧 C# 对象”...
添加其他答案,POxx 术语似乎都源于 POTS(普通旧电话服务)。
POX 用于定义简单(普通的旧)XML,而不是与 REST、SOAP 等相关的复杂的多层内容,是一个有用且隐约有趣的术语。PO(插入选择的语言)O 术语已经使这个笑话变得很淡了。
在 Java 领域,“PO”通常意味着“普通旧”。其余的可能很棘手,所以我猜你的例子(在 Java 的上下文中)是“普通的旧类对象”。
其他一些例子
- POJO(普通的旧 java 对象)
- POJI(普通的旧java接口)
有趣的。我所知道的唯一与编程有关并包含 POCO 的是POCO C++ 框架。
在 WPF MVVM 术语中,POCO 类是不触发 PropertyChanged 事件的类
虽然我确信 POCO 对这里 99.9% 的人来说意味着普通旧类对象或普通旧 C 对象,但 POCO 也是 Animator Pro (Autodesk) 内置的脚本语言。
POCO 是一个普通的旧 CLR 对象,它代表应用程序在其问题域方面的状态和行为。它是一个纯类,没有继承,没有任何属性。例子:
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}