有人可以定义“ POCO”的确切含义吗?我越来越频繁地遇到这个词,我想知道这是仅关于普通类还是意味着更多?
有人可以定义“ POCO”的确切含义吗?我越来越频繁地遇到这个词,我想知道这是仅关于普通类还是意味着更多?
Answers:
“普通的旧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; }
}
上面的示例都继承自一个特殊的类,以赋予其其他行为,并使用自定义属性来更改行为……两个类中都存在相同的属性,但现在不再仅仅是一个普通的旧对象。
System.Object
是POCO。如果它继承自ExternalFramework.OrmMapperBase
或类似的东西,那就不再是POCO。
大多数人都说过-Plain Old CLR Object(与早期的POJO相反-Plain Old Java Object)
POJO是从EJB产生的,它要求您从特定的父类继承诸如值对象(从ORM或类似查询中获取的内容)之类的东西,因此,如果您想从EJB迁移(例如春天),你被塞满了。
POJO只是不强制继承或任何属性标记以使其在您使用的任何框架中“起作用”的类。
POCO相同,但.NET中除外。
通常,它将在ORM周围使用-较旧的(和一些当前的)需要您从特定的基类继承,该基类将您绑定到该产品。较新的不会(休眠是我所知道的变体)-您只需创建一个类,并向ORM注册,然后退出。容易得多。
我对此可能是错的。但是无论如何,我认为POCO是Plain Old Class CLR对象,它来自POJO Plain老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对象”。
有趣。我唯一知道的与编程有关并且包含POCO的就是POCO C ++框架。
POCO是一个普通的旧CLR对象,从问题域的角度表示应用程序的状态和行为。它是一个纯类,没有继承,没有任何属性。例:
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}