¿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.
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.
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.
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.
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.
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.
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".
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.
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; }
}
Respuestas:
"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:
Ejemplo de algo que no es un POCO:
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.
fuente
System.Object
es un POCO. Si heredaExternalFramework.OrmMapperBase
o algo así, ya no es un POCO.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.
fuente
Puedo estar equivocado sobre esto ... pero de todos modos, creo que POCO es un objeto CLR de
claseantigua 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 #:
fuente
POCO significa "Objeto CLR antiguo simple".
fuente
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.
fuente
En .NET, un POCO es un 'Objeto CLR simple y antiguo'. No es un 'Objeto C # simple y antiguo' ...
fuente
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
fuente
Interesante. Lo único que sabía que tenía que ver con la programación y tenía POCO es el marco POCO C ++ .
fuente
En términos MVPM de WPF, una clase POCO es aquella que no dispara eventos PropertyChanged
fuente
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.
fuente
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:
fuente