2009-08-14 35 views

Respuesta

11

Desde PPL otros han enumerado ventajas acabo a enumerar las desventajas


Desventajas

  1. Aumentado tiempo de inicio debido a la preparación de metadatos (no es bueno para aplicaciones de escritorio))
  2. Gran curva de aprendizaje sin fondo orm.
  3. comparativamente Difícil de ajustar fino generado sql.
  4. Difícil gestión de sesiones si se usa en entornos no típicos (leer no webapps)
  5. No adecuado para aplicaciones sin un modelo de objetos de dominio limpio (no todas las aplicaciones en el mundo necesitan modelos de objetos de dominio limpio).
  6. Tienes que saltar por los aros si tienes un esquema db mal diseñado (heredado).
+3

Destaco la inmensa curva de aprendizaje como la principal razón para no utilizar NHibernate en un proyecto. A pesar de todos sus inconvenientes, herramientas como LINQ to Sql son significativamente más fáciles de poner en funcionamiento que NHibernate. Dicho esto, prefiero usar NHibernate en un proyecto que cualquier otro ORM gracias a su increíble flexibilidad. –

+0

Solo en el punto 3, NHibernate le permite ejecutar SQL directamente o procedimientos almacenados y le ayudará a traducir los resultados en su modelo para cuando realmente necesite preocuparse por el SQL utilizado. –

+1

@Garry N + 1 selecciona y su primo sobre la búsqueda ansiosa son la ruina de la mayoría de los proyectos de nhinbernate. El uso de sql directo anularía el objetivo de un ORM – Surya

1

Ventajas:

  1. almacenamiento en caché
  2. simplicidad en su código
  3. eléctricas
  4. Flexibilidad
  5. múltiples bases de datos de apoyo

Desventajas:

  1. paradas que tener que escribir su propio código persistencia
  2. puede reducir sus conocimientos de SQL

aplicaciones que se debe utilizar para:

  • Cualquier que utilizan una base de datos

A few more specific reasons to like NHibernate

+1

No entiendo por qué 'Detiene que tenga que escribir su propio código de persistencia' es una desventaja. – NerdFury

+0

A algunas personas les gusta tener que escribir más código del necesario. Fue un poco irónico. –

+0

Yo agregaría: Cualquiera que use una base de datos - 'pero no lo está usando solo para la manipulación de datos: cargando miles de filas en la memoria' – sirrocco

0

La respuesta de alto nivel es que NHibernate está en una clase en sí mismo y no hay competencia cercana.

Si necesita CRUD contra una base de datos desde una aplicación .NET, usted debe utilizar NHibernate, al menos por dos razones:

1) Usted consigue el apoyo de LINQ (que requiere algo así como un ORM)

2) NHibernate es muy maduro

No hay desventajas significativas. Hay otras opciones, pero esas otras opciones tienen desventajas significativas.

escribí un poco más sobre este hace un tiempo:

.NET and ORM - Decisions, decisions

0

Desventajas: NHibernate no es un producto de Microsoft y, por lo tanto, enfrentará cierta resistencia por parte de compañeros de trabajo que no han oído hablar de él. Especialmente fanáticos de FOSS. Configurar los archivos de mapeo y el comportamiento de carga floja/ansiosa puede llevar mucho tiempo. Si su base de datos tiene una extraña convención de nomenclatura, un diseño atípico o requisitos de rendimiento muy estrictos, es posible que se requiera más trabajo de lo esperado.

Digo esto mucho pero ActiveRecord es una gran capa sobre NHibernate. Utiliza atributos para asignar los puntos de datos a los miembros de la clase directamente en las clases. La gente no está usando esto lo suficiente.

3

Ventajas:

  • de código abierto
  • basadas en los patrones ampliamente aprobados
  • NH no es generador de código :)

Desventajas:

  • de medio de soporte LINQ hecho
  • bajo rendimiento

(ver, por ejemplo, pruebas de rendimiento y LINQ en ormbattle.net)

+1

Hablando técnicamente, generador de código NH IS: lee metadatos y genera clases de proxy utilizando LinFu o Castle DynamicProxy. El soporte de LINQ en Linq2Nhibernate parece estar lleno en lo que respecta a API de Criteria, por lo que es más limitado que HQL pero sigue siendo muy potente y suficiente para la mayoría de las situaciones. Totalmente en desacuerdo con el rendimiento. – Ray

+1

Estoy de acuerdo con usted, es el generador de código de tiempo de ejecución, pero no el tiempo de diseño. Personalmente, no me gustan las herramientas, que generan toneladas de código en tiempo de diseño. Entonces es una ventaja de NH. En cuanto a LINQ, no hay duda, están justo al comienzo del camino. –

+2

Esos puntos de referencia son incorrectos. Consulte aquí http://ayende.com/Blog/archive/2009/08/15/benchmarks-are-useless-yes-again.aspx – Ray

5

Ventajas:

  1. capacidades de mapeo flexible y muy potentes.
  2. Almacenamiento en caché.
  3. Implementación de UnitOfWork muy pulida.
  4. Consulta futura (article).
  5. Las clases de modelo son POCO, lo que significa que puede implementar fácilmente un antipatrón de dominio anémico.
  6. Interceptores: puede hacer un tipo de programación orientada a aspectos ... Como implementar fácilmente audición, registro, autorización, validación, etc. para su dominio.
  7. Lucene.NET y NHibernate están bien integrados entre sí, le ofrece una implementación muy rápida y efectiva de la indexación de texto completo.
  8. Es muy maduro y popular en el entorno empresarial.
  9. Gran comunidad.

Desventajas:

  1. ya se ha mencionado la curva de aprendizaje. Puede comenzar a usar NHibernate muy rápido pero le llevará meses dominarlo. Recomiendo leer el libro de Manning NHibernate.

  2. Escribir mapeo XML puede ser muy tedioso, especialmente para grandes bases de datos con cientos y miles de tablas y vistas y procedimientos almacenados.Sí, hay herramientas que te ayudarán generando esas asignaciones, pero aún tendrás que hacer bastante trabajo manual allí. Fluent NHibernate parecen simplificar este proceso al deshacerse de las asignaciones de XML, por lo que es Castle ActiveRecord (aunque AR es imposible de usar para un dominio anémico a medida que define asignaciones en atributos en sus clases de modelo).

  3. El rendimiento puede ser bajo para ciertos escenarios. Por ejemplo, grandes operaciones a granel. Para aquellos que quizás deba usar IStatelessSession pero su experiencia incómoda, al menos para decir ...

+0

Para generar mapeos XML , al menos considere Active Writer: http://using.castleproject.org/display/Contrib/ActiveWriter –

Cuestiones relacionadas