有人能定义一下“POCO”的确切含义吗?我越来越频繁地遇到这个术语,我想知道它只是关于普通类还是意味着更多的东西?
当前回答
POCO是一个普通的旧式CLR对象,它根据问题域表示应用程序的状态和行为。 它是一个纯类,没有继承,没有任何属性。 例子:
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
其他回答
在。net中,POCO是一个“普通的旧式CLR对象”。它不是一个“普通的旧c#对象”……
普通的旧式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; }
}
上面的例子既继承了一个特殊的类来赋予它额外的行为,也使用了一个自定义属性来改变行为……两个类中存在相同的属性,但其中一个不再只是一个普通的旧对象。
在WPF MVVM术语中,POCO类是不触发PropertyChanged事件的类
这件事我可能错了。但无论如何,我认为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对象,它根据问题域表示应用程序的状态和行为。 它是一个纯类,没有继承,没有任何属性。 例子:
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}