Alguém pode definir o que exatamente 'POCO' significa? Estou encontrando o termo com mais e mais frequência, e estou me perguntando se é apenas sobre classes simples ou significa algo mais?
Alguém pode definir o que exatamente 'POCO' significa? Estou encontrando o termo com mais e mais frequência, e estou me perguntando se é apenas sobre classes simples ou significa algo mais?
Respostas:
"Objeto C # antigo simples"
Apenas uma classe normal, nenhum atributo que descreva preocupações de infraestrutura ou outras responsabilidades que seus objetos de domínio não deveriam ter.
EDIT - como outras respostas declararam, é tecnicamente "Plain Old CLR Object", mas eu, como comenta David Arno, prefiro "Plain Old Class Object" para evitar vínculos com linguagens ou tecnologias específicas.
PARA ESCLARECER: Em outras palavras, eles não derivam de alguma classe base especial, nem retornam nenhum tipo especial para suas propriedades.
Veja abaixo um exemplo de cada um.
Exemplo de um POCO:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
Exemplo de algo que não é um POCO:
public class PersonComponent : System.ComponentModel.Component
{
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public string Name { get; set; }
public int Age { get; set; }
}
O exemplo acima herda de uma classe especial para fornecer um comportamento adicional e usa um atributo personalizado para alterar o comportamento ... as mesmas propriedades existem em ambas as classes, mas uma não é mais apenas um objeto antigo comum.
System.Object
é um POCO. Se herdar ExternalFramework.OrmMapperBase
ou algo assim, não será mais um POCO.
A maioria das pessoas disse isso - Objeto CLR Antigo Simples (em oposição ao POJO anterior - Objeto Java Antigo Simples)
O POJO saiu do EJB, que exigia que você herdasse de uma classe pai específica para objetos como objetos de valor (o que você recebe de uma consulta em um ORM ou similar), portanto, se você quiser mudar do EJB (por exemplo, para Primavera), você estava empalhado.
POJO's são apenas classes que não forçam a herança ou qualquer marcação de atributo para fazê-las "funcionar" em qualquer estrutura que você esteja usando.
POCO's são os mesmos, exceto no .NET.
Geralmente, ele será usado em torno dos ORM - os mais antigos (e alguns atuais) exigem que você herde de uma classe base específica, que o vincula a esse produto. Os mais novos não (nhibernate é a variante que eu conheço) - você apenas cria uma classe, registra-a no ORM e está fora. Muito facil.
Posso estar errado sobre isso .. mas de qualquer maneira, eu acho que POCO é Plain Old Classe CLR Objeto e vem de POJO velho liso objeto Java. Um POCO é uma classe que contém dados e não possui comportamentos.
Aqui está um exemplo escrito em 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 significa "Objeto CLR Antigo Simples".
Para adicionar as outras respostas, todos os termos do POxx parecem resultar do POTS ( serviços telefônicos antigos simples ).
O POX, usado para definir XML simples (antigo), em vez do material complexo de várias camadas associado ao REST, SOAP etc., era um termo útil e vagamente divertido. PO (insira o idioma de escolha) O termos bastante desgastaram a piada.
Em termos de WPF MVVM, uma classe POCO é aquela que não aciona eventos PropertyChanged
Embora eu tenha certeza de que POCO significa Objeto de Classe Antiga Simples ou Objeto C Antigo Simples para 99,9% das pessoas aqui, o POCO também é o Animator Pro (Autodesk), construído em linguagem de script.
O POCO é um objeto CLR antigo simples, que representa o estado e o comportamento do aplicativo em termos de seu domínio do problema. é uma classe pura, sem herança, sem atributos. Exemplo:
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}