Decidir entre NHibernate vs Entity Framework?


¿Cuáles son las principales ventajas y desventajas de NHibernate y Entity Framework 4.0?

(Al etiquetar mi pregunta, he notado más etiquetas NHibernate que EF. Es NHibernate más popular?)

Author: Sahat Yalkabov, 2010-07-20

2 answers

He tenido una experiencia muy limitada con EF (algunas entradas de blog y tutoriales), pero mucha experiencia con NHibernate.

Microsoft está consistentemente detrás de donde está el movimiento de código abierto, y este es definitivamente el caso con NHibernate. Cuando EF 1.0 se lanzó por primera vez, carecía de soporte para características clave como POCO support y persistence ignorance, requería que sus clases de entidad extendieran una clase de entidad base de EF, por lo que sus clases de entidad no estaban completamente desacopladas de EF. Esto afectó la mantenibilidad y la capacidad de prueba unitaria, así como la capacidad de cambiar de proveedor OR si fuera necesario.

NHibernate por otro lado le permitió desacoplar completamente sus entidades de NHibernate en sí. EF 4.0 se ha puesto un poco al día en este sentido, su enfoque de desarrollo de Código Primero (anunciado recientemente por Scott Guthrie) es un paso en la dirección correcta.

NHibernate tiene algunas capacidades de mapeo muy potentes, como mapeo de herencia, mapeo de las clases de componentes (piense en el objeto Address en una entidad Cliente), asignación de asociaciones de entidades unidireccionales. Le permite aprovechar al máximo el poder de la programación Orientada a Objetos (Encapsulación, Polimorfismo, Herencia, etc.).) dentro de su modelo de dominio, piense en sus clases de entidad como comportamiento de encapsulación y no solo contenedores de datos. Si está aspirando a construir su modelo de dominio según los principios de Domain Driven Design, entonces NHibernate es una muy buena opción para esto. No puedo hable directamente sobre EF 4.0 en estos puntos, solo por lo que escucho de otros usuarios de NHibernate que intentan usar EF 4.0, pero EF 4.0 todavía se queda atrás en estas áreas, pero está ganando terreno.

 18
Author: Sunday Ironfoot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-20 13:04:55

Yo diría que el hecho de que Entity Framework es de Microsoft es tanto una ventaja como una desventaja. Está obteniendo un framework directamente de la misma fuente que.NET. La mala noticia es que Microsoft a menudo obsoleta su propia base de código sin tener en cuenta la compatibilidad hacia atrás.

NHibernate no viene de Microsoft, y no hay otro estándar que lo que los desarrolladores de Hibernate y NHibernate dicen que pertenecen a su código. La buena noticia es que generalmente han pagado atención a la compatibilidad con versiones anteriores. Hay una gran base de usuarios, porque Hibernate ha existido por un tiempo.

Una de las características que más me gusta de Spring es que no toman decisiones como esta lejos de ti. Spring tiene sus propias características JDBC, pero es compatible con Hibernate, TopLink, JDO, iBATIS y JPA. También es libre de inyectar sus propias clases si decide ir por otro camino (por ejemplo, NoSQL). ¿Por qué sus opciones deberían ser dictadas por la elección del marco? Es muy nanny-ish: "Somos Microsoft; sabemos lo que es mejor para ti mejor que tú."

 10
Author: duffymo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-20 17:14:37