Definição de 'POCO'

238

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?

saku
fonte
27
Também é engraçado que "poco" seja uma palavra espanhola que significa "pouco, não muito". Então, ele se encaixa nesse contexto muito bem! en.wiktionary.org/wiki/poco
EnocNRoll - AnandaGopal Pardue
6
Isso significa exatamente a mesma coisa em italiano também :)
BlackBear
3
E em português significa erro porque está escrito: "pouco".
Ismael
3
Soa como PocoHaram para me :)
usefulBee
4
Em polonês "POCO" está a pergunta "Por que usá-lo"
titol 20/08/16

Respostas:

197

"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.

David Mohundro
fonte
15
Eu veria um POCO como uma classe antiga simples que não tenta fazer parte do conjunto de padrões da moda. No entanto, eu também gosto da sua resposta.
David Arno
1
Concordo - não sou fã do nome C #, mas foi o que ouvi pela primeira vez quando fiquei pensando sobre a pergunta :) A classe se encaixa em POJO, POVBO POC # O, POC ++ O, PORO etc.
David Mohundro
14
Isso realmente não dá uma boa resposta na minha opinião pessoal, como alguém também curioso. Ok, então nenhum atributo descreve a infraestrutura (o que você quer dizer com atributos e infraestrutura ... uma conexão com o banco de dados, por exemplo? O quê? Exemplo, por favor). Quais responsabilidades seus objetos de domínio não devem ter? Então o POCO é basicamente um objeto de domínio (objeto BL)? Então, realmente, o POCO é apenas mais um acrônimo para Objeto de Camada de Negócios / Objeto de Domínio, que significa a mesma coisa. POCO / Objeto de camada de negócios / Objeto de domínio == mesma coisa, apenas 3 acrônimos diferentes para o mesmo conceito, certo?
PositiveGuy
4
esta resposta não me diz absolutamente nada sobre o que é no mundo real ... apenas uma definição que qualquer pessoa pode procurar na Wikipedia. Como estão alguns exemplos de classes POCO ?? e por que eles são POCO no contexto.
PositiveGuy
1
Como exemplo, uma classe que você escreveu que herda apenas System.Objecté um POCO. Se herdar ExternalFramework.OrmMapperBaseou algo assim, não será mais um POCO.
David Mohundro
47

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.

Nic Wise
fonte
1
por uma questão de integridade, o CLR apunhala o Common Language Runtime - a máquina virtual .net.
philant 30/10/08
4
Exemplo de .Net 3.5 sp1 ORM: a estrutura Entity requer que as classes sejam herdadas de uma determinada classe de estrutura. LINQ to SQL não tem esse requisito. Portanto, o LINQ to SQL funciona com POCOs e a estrutura Entity não.
2727 Lucas
23

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}";
    }
}
Viking jonsson
fonte
4
Essa deve ser a resposta aceita. Ele fornece a explicação real (não possui comportamentos) e também tem um exemplo para entender melhor a aparência de um POCO.
Héctor Álvarez
O método ToString () neste exemplo não é um "comportamento"?
precisa saber é o seguinte
Eu argumentaria sobre um POCO não ter comportamento. É simplesmente uma classe que não depende de outra estrutura / biblioteca que não seja a .Net. Ou seja, a classe File é POCO, mas o DbContext não é porque depende do Entity Framework.
user3285954
9

POCO significa "Objeto CLR Antigo Simples".

Robert Gamble
fonte
24
ooooook? Então, o que isso significa no contexto ou no mundo real?
PositiveGuy
27
E como a minha professora de eletricidade diria: "... e laranjas gosto orangey"
Ian Boyd
7
Certo, mas este post parece mais um comentário do que uma resposta, uma vez que não responde completamente à pergunta.
Anar khalilov
7

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.

David Arno
fonte
6

No .NET, um POCO é um 'Objeto CLR antigo simples'. Não é um 'Objeto C # antigo simples' ...

Hardgraf
fonte
5

Na terra de Java, tipicamente "PO" significa "planície antiga". O resto pode ser complicado, então acho que seu exemplo (no contexto de Java) é "objeto de classe antiga simples".

alguns outros exemplos

  • POJO (objeto java antigo simples)
  • POJI (interface java antiga simples)
basszero
fonte
3

Interessante. A única coisa que eu sabia que tinha a ver com programação e tinha o POCO nela é a estrutura do POCO C ++ .

ayaz
fonte
2

Em termos de WPF MVVM, uma classe POCO é aquela que não aciona eventos PropertyChanged

Ponteiro nulo
fonte
1

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.

Mr Mystery Guest
fonte
0

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; }
}
Mohammad Kamel
fonte