Definición de 'POCO'


238

¿Alguien puede definir qué significa exactamente 'POCO'? Me encuentro con el término cada vez más a menudo, y me pregunto si se trata solo de clases simples o si significa algo más.


27
También es gracioso que "poco" es una palabra en español que significa "poco, no mucho". Por lo tanto, se ajusta muy bien a este contexto. en.wiktionary.org/wiki/poco
EnocNRoll - AnandaGopal Pardue

66
Significa exactamente lo mismo en italiano también :)
BlackBear

3
Y en portugués significa un error porque se deletrea: "pouco".
Ismael

3
Suena como PocoHaram para mí :)
útilBee

44
En polaco "poco" es la pregunta "¿Por qué usarlo"
titol

Respuestas:


197

"Objeto antiguo simple de C #"

Solo una clase normal, sin atributos que describan problemas de infraestructura u otras responsabilidades que los objetos de su dominio no deberían tener.

EDITAR: como han dicho otras respuestas, técnicamente es "Objeto CLR antiguo simple", pero, como comenta David Arno, prefiero "Objeto antiguo de clase simple" para evitar lazos con lenguajes o tecnologías específicos.

PARA ACLARAR: En otras palabras, no se derivan de alguna clase base especial, ni devuelven ningún tipo especial por sus propiedades.

Vea a continuación un ejemplo de cada uno.

Ejemplo de una POCO:

public class Person
{
    public string Name { get; set; }

    public int Age { get; set; }
}

Ejemplo de algo que no es un POCO:

public class PersonComponent : System.ComponentModel.Component
{
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public string Name { get; set; }

    public int Age { get; set; }
}

El ejemplo anterior hereda de una clase especial para darle un comportamiento adicional, así como también usa un atributo personalizado para cambiar el comportamiento ... las mismas propiedades existen en ambas clases, pero uno ya no es un simple objeto antiguo.


15
Vería a un POCO como una vieja clase simple que no intenta ser parte del conjunto de patrones de moda. Sin embargo, también me gusta tu respuesta.
David Arno

1
De acuerdo, no soy fanático del nombre C #, pero eso fue lo que escuché por primera vez cuando me preguntaba sobre la pregunta :) La clase luego se ajusta a POJO, POVBO POC # O, POC ++ O, PORO, etc.
David Mohundro,

14
Esto realmente no da una buena respuesta en mi opinión personal ya que alguien también es curioso. Ok, entonces no hay atributos que describan la infraestructura (¿qué quiere decir con atributos e infraestructura ... una conexión de base de datos, por ejemplo? ¿Qué? Ejemplo, por favor). ¿Qué responsabilidades no deberían tener tus objetos de dominio? Entonces, ¿POCO es básicamente un objeto de dominio (objeto BL)? Entonces, realmente POCO es solo otro acrónimo de un objeto de capa empresarial / objeto de dominio que significa todo lo mismo. POCO / Business Layer Object / Domain Object == misma maldita cosa, solo 3 siglas diferentes para el mismo concepto ¿verdad?
PositiveGuy

44
esta respuesta no me dice absolutamente nada sobre lo que es en el mundo real ... solo una definición que cualquiera puede buscar en Wikipedia. ¿Qué tal algunas clases de POCO de ejemplo? y por qué son POCO en contexto.
PositiveGuy el

1
Como ejemplo, una clase de la que escribió que solo hereda System.Objectes un POCO. Si hereda ExternalFramework.OrmMapperBaseo algo así, ya no es un POCO.
David Mohundro

47

La mayoría de la gente lo ha dicho: Objeto CLR antiguo simple (en oposición al POJO anterior: Objeto Java antiguo simple)

El POJO salió de EJB, que requería que heredara de una clase primaria específica para cosas como objetos de valor (lo que obtienes de una consulta en un ORM o similar), por lo que si alguna vez quisiste pasar de EJB (por ejemplo a Primavera), estabas lleno.

Los POJO son solo clases que no fuerzan la herencia o cualquier marca de atributo para hacerlos "trabajar" en cualquier marco que esté utilizando.

Los POCO son iguales, excepto en .NET.

En general, se usará alrededor de ORM: los más antiguos (y algunos actuales) requieren que herede de una clase base específica, lo que lo vincula a ese producto. Las más nuevas no lo hacen (nhibernate es la variante que conozco): solo haces una clase, la registras en el ORM y estás listo. Más fácil.


1
solo por completar, CLR apuñala para Common Language Runtime: la máquina virtual .net.
frágil

44
Ejemplo de .Net 3.5 sp1 ORM: el marco de Entity requiere que las clases hereden de una determinada clase de marco. LINQ to SQL no tiene este requisito. Por lo tanto, LINQ to SQL funciona con POCO y el marco de Entity no.
Lucas

23

Puedo estar equivocado sobre esto ... pero de todos modos, creo que POCO es un objeto CLR de clase antigua simple y proviene de un objeto Java antiguo simple de POJO. Un POCO es una clase que contiene datos y no tiene comportamientos.

Aquí hay un ejemplo escrito en 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}";
    }
}

44
Esta debería ser la respuesta aceptada. Proporciona la explicación real (no tiene comportamientos) y también tiene un ejemplo para comprender mejor cómo se ve un POCO.
Héctor Álvarez

¿No es el método ToString () en este ejemplo un "comportamiento"?
jdoer1997

Yo diría que un POCO no tiene comportamiento. Es simplemente una clase que no depende de otro framework / biblioteca que no sea .Net. Es decir, la clase File es POCO, pero DbContext no lo es porque depende de Entity Framework.
user3285954

9

POCO significa "Objeto CLR antiguo simple".


24
ooooook? Entonces, ¿qué significa eso en contexto o en el mundo real?
PositiveGuy

27
Y como diría mi maestro de electricidad de la escuela secundaria, "... y las naranjas saben a naranja"
Ian Boyd

77
Correcto, pero esta publicación parece más un comentario, en lugar de una respuesta, ya que no responde completamente la pregunta.
anar khalilov

7

Para agregar las otras respuestas, todos los términos POxx parecen provenir de POTS ( servicios telefónicos antiguos ).

El POX, utilizado para definir XML simple (antiguo), en lugar de las complejas cosas de varias capas asociadas con REST, SOAP, etc., fue un término útil y vagamente divertido. PO (inserte el idioma de elección) Los términos O han desgastado bastante la broma.


6

En .NET, un POCO es un 'Objeto CLR simple y antiguo'. No es un 'Objeto C # simple y antiguo' ...


5

En la tierra de Java, típicamente "PO" significa "simplemente viejo". El resto puede ser complicado, por lo que supongo que su ejemplo (en el contexto de Java) es "objeto de clase antigua simple".

algunos otros ejemplos

  • POJO (simple objeto java antiguo)
  • POJI (interfaz simple de Java)


2

En términos MVPM de WPF, una clase POCO es aquella que no dispara eventos PropertyChanged


1

Si bien estoy seguro de que POCO significa Objeto de clase antigua simple u Objeto C antiguo simple para el 99.9% de las personas aquí, POCO también es Animator Pro (Autodesk) integrado en lenguaje de secuencias de comandos.


0

POCO es un antiguo objeto CLR simple, que representa el estado y el comportamiento de la aplicación en términos de su dominio del problema. Es una clase pura, sin herencia, sin ningún atributo. Ejemplo:

public class Customer
{
    public int Id { get; set; }

    public string Name { get; set; }
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.