2010-04-20 25 views
29

¿Cuál es el beneficio de usar POCO? No entiendo el significado de Persistence Ignorance, ¿qué significa esto? ¿Que el objeto poco no puede exponer cosas como Guardar? No puedo entender este POCO porque hay mucho alboroto alrededor.¿Qué es Entity Framework con POCO

¿Cuál es la diferencia con las entidades generadas por EF y POCO?

Respuesta

42

POCO significa "Objeto simple de C# llanura" o "Objeto de CLR sencillo normal", según a quién se lo pregunte. Si un marco o API indica que opera en POCO, significa que le permite definir su modelo de objeto idiomatically sin tener que hacer que sus objetos hereden de clases base específicas. En términos generales, los marcos que funcionan en POCO le permiten una mayor libertad y control sobre el diseño y la implementación de sus clases, ya que tienen menos requisitos para funcionar correctamente.

ignorancia de persistencia significa que cualquier cosa en su código que opere en la capa de lógica de negocios o superior no sabe nada sobre el diseño real de la base de datos, qué motor de base de datos está ejecutando, o cómo o cuándo se obtienen objetos recuperado o persistido en la base de datos. En el caso del MEF, la ignorancia de persistencia se logra trabajando en POCO y utilizando LINQ para realizar consultas (es decir, no requiere que el usuario cree consultas SQL para recuperar los objetos deseados).

Es una pregunta abierta, pero en general se acepta que, en la mayoría de las circunstancias, los objetos de dominio (u objetos comerciales, de cualquier manera, los POCO mencionados anteriormente) deberían ignorar la lógica de persistencia. Es decir, en lugar de llamar al MyBusinessObject.Save(), tiene un administrador de IO o una clase de adaptador, y llama al Manager.Save(MyBusinessObject). De esta manera, evitas exponer la semántica de persistencia en tus objetos de negocio: obtienes una mejor separación de las preocupaciones de esa manera.

+5

Pero con entidades generadas por EntityFramework, ya tenemos esta separación con las clases generadas que heredan de ObjectContext a la persistencia y las clases que representan a la entidad. Estoy leyendo el artículo en la revista msdn sobre EF 4.0 y hay una sección sobre POCO, en el artículo, el escritor crea un objeto desde cero ... ¿No podemos usar las entidades generadas? ¿No son POCO? – pdiddy

+0

¿Puedes publicar un enlace al artículo? Si su marco requiere que sus clases * entity * deriven de una clase base particular o que incluyan atributos específicos de framework o implementen interfaces de framework, entonces no es compatible con POCO's. Si EF 4.0 no coloca una clase base o requisito de atribución en sus clases de entidad, entonces es compatible con POCO. Tenga en cuenta que esta restricción no se aplica a las clases que están específicamente destinadas a gestionar la semántica de persistencia: * tienen * que acoplarse a la persistencia, y hablando de POCO, falta el punto. – Dathan

+2

EF usará por defecto 'EntityObject' como su clase base para todas sus entidades -> definitivamente no POCO. * PERO *: con EF4, tiene la opción de activar el soporte de POCO, en cuyo caso sus clases no derivan de ninguna clase base específica, no necesitan implementar ninguna interfaz específica, y no necesitan ningún atributo cualquiera -> POCO puro. –

3

POCO = Objetos simples de CLR antiguos.

Plain Old CLR (es decir, C# o VB) objetos significa que puedo hablar de C# o VB todo el tiempo que estoy escribiendo mi programa, y ​​no tener que preocuparse por el lenguaje de base de datos esotéricos como

UPDATE MYTABLE SET MYFIELD1 = @MYPARAMETER1, MYFIELD2 = @MYPARAMETER2 BLAH BLAH 

entidades EF Generados == POCO conectado (indirectamente) a una base de datos.

+1

Llanura Antigua CLR Objects está más cerca de la verdad. Esto funciona bien con VB.Net o cualquier otro lenguaje compatible con CLS. – sblom

0

La clase POCO es la clase que no depende de ninguna clase base específica del marco. Es como cualquier otra clase normal de .NET por lo que se llama "Objetos CLR antiguos simples" Estas entidades POCO (también conocidas como objetos ignorantes de persistencia) admiten la mayoría de las mismas consultas LINQ como entidades derivadas EntityObject.

0

POCO = Plain Old CLR Objects

POCO Beneficios:

Tecnología agnosticismo es una dicha: Este concepto es por lo general giran en torno a PI (Persistencia La ignorancia), pero no es sólo eso. Ignorancia de persistencia significa que sus entidades no deben tener restricciones de código relacionadas con la persistencia que un marco, generalmente un ORM, le imponga. Esto es, por ej. si tiene un mapeo de nivel de atributo donde esos atributos no son parte de su dominio, pero existen porque un framework quiere que estén allí, entonces su dominio no es persistente ignorante. Sidar said here

Cuestiones relacionadas