2009-07-11 12 views
25

Estoy tratando de trabajar con la herramienta ORM para pasar a la siguiente y la he reducido a dos candidatos.nHibernate versus LLBLGen Pro

NHibernate o LLBLGen Pro

Por favor, puede que ustedes me dará ventajas y desventajas en el uso de estos dos herramientas especialmente si tiene experiencia en ambos. No estoy realmente interesado en ninguna otra herramienta, pero quiero algunas pistas para poder decidir qué herramienta dedicar a aprender ...

Ya sé que uno es gratis y no lo es, también sé que NHibernate podría tomar algo de aprendizaje ....

Muchas gracias, Richard

Respuesta

33

he utilizado ambos. Al principio me vendieron en nHibernate y me negué a probar cualquier otra cosa aunque sabía de otras opciones.

Con LLBLGen Pro, era escéptico, pero pronto vi las ventajas también. No he abandonado por completo nHibernate. Continuaré manteniendo int en mi "caja de herramientas".He encontrado que LLBLGen es útil en algunos casos, especialmente cuando interactúas con una base de datos que ya existe y no tienes opción de rediseñarla. Tarda menos de una hora (dependiendo del tamaño de la base de datos, por supuesto) para generar mis objetos de entidad LLBLGen de la base de datos, en lugar de tener que codificar todo manualmente con nHibernate, Y hacer las asignaciones. nHibernate no tiene una buena interfaz gráfica para crear las asignaciones. Este hecho se vuelve aún más importante cuando la base de datos es masiva con miles de tablas a las que necesita acceder en su aplicación.

Aunque LLBLGen es más un generador de capa de acceso a datos (y no soy normalmente un fan de los generadores DAL), tiene muchas características que una herramienta "verdadera ORM" tendría. En mi opinión, tiene lo mejor de ambos mundos. Una vez que empiezas a trabajar con él, empiezas a darte cuenta de que es muy flexible y extensible. Una parte que me gusta mucho es que me es posible crear clases parciales para los objetos de entidad generados, donde puedo codificar en mi lógica comercial, así como la validación.

La generación del código está modelada para que tenga control total sobre el código que genera. Con nHibernate me encuentro escribiendo algo del mismo tipo de código una y otra vez. Con LLBLGen puedo generarlo y concentrarme en la lógica empresarial y los problemas de forma más rápida.

Para alguien que está empezando a usar herramientas de tipo ORM, realmente recomiendo comenzar con LLBLGen, porque nHibernate puede ser abrumador. Y al final habrá logrado el mismo resultado (más o menos).

Edit # 1: LLBLGen ahora también tiene 100% de soporte para LINQ. (Entonces, si le gusta LINQ to SQL), LLBLGen puede admitir muchas bases de datos, donde LINQ to SQL es solo para Microsoft SQL Database.

Edición # 2: According to Graviton puede utilizar CodeSmith hacer una parte del código que genera para usted para NHibernate. Eso es realmente genial, pero para un recién llegado al ORM, aún recomendaría LLBLGen. Para mí eso es agregar más dependencias donde LLBLGen lo tiene todo en un solo paquete. También como dije antes, la curva de aprendizaje es mucho menos pronunciada y obtendrás los mismos beneficios, lo que también te ayudará a nHibernate si alguna vez decides ir allí.

+2

Muchas gracias Roberto, tengo algunos estudios que hacer aquí .... – Rippo

+0

Si buscas para las capacidades de generación de código para NHibernate, puede ver CodeSmith; tiene soporte de nhibernate: http://itscommonsensestupid.blogspot.com/2009/04/nhibernate-multiple-databases-support.html – Graviton

+0

Interesante, gracias Ngu Soon Hui, eso es bueno saberlo. – 7wp

19

La principal diferencia es que LLBLGen es un generador de código, mientras que NHibernate es un ORM por "verdadero".

ventajas LLBLGen:

  • fácil utilizar el diseñador del modelo. Puede importar el esquema de base de datos existente
  • totalmente mecanografiado modelo de objetos y de consulta en lenguaje

LLBLGen desventaja:

  • necesita la aplicación diseñador cambiar su modelo
  • No libre
  • Puede inflar su código porque se genera una gran cantidad de código

ventajas de NHibernate:

  • No hay ninguna aplicación diseñador necesario. Sólo código
  • ampliamente utilizado (basado en el más popular de Java ORM, Hibernate)
  • muy poderosa para el mapeo de cualquier modelo de datos se puede imaginar
  • de código abierto

NHibernate desventaja:

  • Difícil de aprender
  • No tan fuertemente tipeado como uno quisiera (especialmente consultas)

Por supuesto, esto es sólo mi punto de vista personal ...

+0

¿Cuál es tu favorito? ¿Cuál recomendarías? – Rippo

+2

No elegiría ninguno, pero he tenido que usar ambos y prefiero NHibernate a LLBLGen. La razón es que odio las dependencias en las herramientas de generación de código externo, pero eso es algo personal :) –

+2

He usado ambos, y en general, elegiría LLBL ... principalmente porque LLBL puede ponerlo en marcha con mucho menos trabajo/código. Si puede relacionarse más con las tablas de la base de datos que con los objetos de dominio abstraídos, LLBL es para usted. –

1

Utilizamos LLBLGen en el trabajo, y es vilipendiado, concretamente porque tenemos varios esquemas similares, pero debe tener una biblioteca DLL/Clase diferente para cada esquema, lo que significa que se vuelve molesto escribir código que pueda apuntar a cualquier esquema.

Por supuesto, ese es un entorno inusual, por lo que es posible que no se aplique en su caso.

+12

puede utilizar la sobrescritura de nombre de esquema, por lo que puede orientar esquemas similares con 1 base de código.Esto se puede hacer en el archivo de configuración de su aplicación, pero también en tiempo de ejecución a través de llamadas a DataAccessAdapter. –

2

No se olvide de uno de los mayores puntos a favor de Hibernate: HQL. Con HQL, tu habilidad de SQL no se desperdicia. Además, Hibernate proporciona un soporte muy bueno y sin problemas para consultas nativas. Si tiene alguna base de datos extraña y fuera de norma, es casi seguro que necesita su habilidad SQL en algún momento, ¡y buena suerte con LLBL!

+2

Estoy de acuerdo y respeto nHibernate. Pero no golpee LLBL tampoco porque tiene soporte para SQL nativo. LLBL es simplemente diferente en que es al revés, impulsado por los datos. Donde nHibernate es impulsado por el dominio y puede impulsar las cosas de la base de datos hasta mucho más tarde en su desarrollo. – 7wp

+0

Cómo ejecutar SQL nativo en LLB es un secreto muy bien guardado. Adelante, ¡pregúnteles cómo hacerlo en los foros! :) – tbone

8

He escrito una respuesta bastante larga antes de darme cuenta de que esta era una pregunta un tanto vieja. Oh bien. Aún es muy relevante.

Has reducido tu lista a los dos mejores candidatos para un ORM en el mundo .NET. Tengo experiencia limitada con ambos, pero he leído mucho sobre los pros y los contras de ambos. Realmente sirven necesidades algo diferentes de diferentes maneras.

En el próximo LLBLGen Pro 3.0, Frans Bouma ha hablado de agregar funciones para generar asignaciones NHibernate. Entonces, ni siquiera es necesariamente una decisión de ambos.

Si desea hacer un diseño de "primera clase" (en oposición al diseño de "base de datos primero"), NHibernate es su mejor y única opción en este momento (ni LLBLGen Pro ni Entity Framework admiten este modo, aunque suena al igual que Entity Framework está mejorando su soporte en la próxima versión).

NHibernate y LLBLGen Pro ambos trabajan duro para trabajar bien con bases de datos heredadas que no se puede cambiar y que tienen que vivir. Esa es su fuerza común. Ambos también trabajan con Linq. Ambos también admiten cierta cantidad de modelos gráficos, aunque LLBLGen Pro es muy superior en este sentido (ActiveWriter for NHibernate se siente como el diseñador LinqToSql en Visual Studio, pero en realidad no es tan rico en funciones).

LLBLGen Pro tiene capacidades de generación de código mucho más fuertes, pero demasiada generación de código puede llevar a comprobaciones y mantenibilidad comprometidas (una pequeña modificación puede provocar que se necesiten cantidades masivas de código para volver a realizar la prueba).

Si bien NHibernate quiere ayudarlo a trabajar en escenarios de mapeo relacional/de objetos bastante complejos como la herencia de clases, LLBLGen Pro solo está exponiendo su base de datos como una capa de datos y objetos comerciales de una manera muy rápida.

Si puede comprar LLBLGen Pro y tener algo de tiempo, probaría ambos y vería cuál se ajusta mejor a sus necesidades. Aprender ambos ORMs es bueno para su currículum en cualquier caso.

Así que, al final, diría que es situacional. El costo de NHibernate y su falta de defectos serios hacen un caso bastante convincente en la mayoría de las situaciones.

+0

Gracias por su comentario ... ¡Lo voté! ¡Todavía estoy reflexionando sobre esto! – Rippo

2

Para mí se reduce a base de datos centrada (LLBLGen Pro) frente a modelo de dominio céntrico (NHibernate).

Como yo soy un tipo DDD/OO, la elección siempre ha sido muy fácil para mí, pero yo no veo por qué LLBLGen Pro es popular.

+0

NHibernate funciona con los diseños Database-First y con las herramientas Domain-To-Model. Históricamente siempre fue Model-First, pero nuevamente, ahora existen herramientas para generar (y actualizar) el Modelo desde la Base de Datos. –

6

La nueva versión de LLBLGen Pro (3.0) le permite generar código para NHibernate, por lo que no tiene que elegir :). También le permite dividir sus entidades en diferentes dominios.

yo prefiero el Pro Runtime LLBLGen embargo, el intérprete de LINQ es más completa y tiene un mejor seguimiento de cambios de campos.

Lamentablemente, no hay muchas características nuevas en el nuevo tiempo de ejecución de LLBLGen Pro 3.0, ya que el creador primero quería centrarse más en las herramientas que en mejorar el marco existente.

+1

Tenga en cuenta que 3.1 (recientemente lanzado) incluía mejoras de administración de velocidad y memoria para el tiempo de ejecución de LLBLGen Pro. –

3

He usado NHibernate, LLBLGen Pro, una capa de datos personalizada de mi empresa de consultoría, el Enterprise Library, y LINQ. LLBLGen es, de lejos, mi favorito y permite escribir una capa de negocios que puede hablar con diferentes tipos de bases de datos utilizando el mismo código que proporciona independencia de la base de datos. Otra característica increíble es que permite conexiones múltiples a diferentes bases de datos. Esto es muy útil cuando en una empresa grande y un sistema está escrito en Sql Server y el otro con el que tiene que interactuar está en Oracle.

LLBLGen Pro es un producto increíble respaldado por Frans que es muy activo y trabaja duro para solucionar problemas. LLBLGen es como PhotoShop, es una herramienta increíble y puede hacer efectos asombrosos en manos de alguien que sabe cómo usarla. Y como cualquier herramienta que ahorra mucho tiempo, lleva una semana o dos aprender a usarla, pero ahorrará meses más tarde en su proyecto.

No sólo acelerar el lado de la generación DAL de mi aplicación, también es fácil de crear consultas en la capa de negocios y enviar a la capa de presentación. Facilitó la creación de una aplicación de clase empresarial.

Si uno realmente quiere usar nHibernate, comience con LLBLGen Pro y genere el código nHibernate. Si más adelante su departamento decide cambiar de nHibernate a LINQ, estará cubierto. ¿Desea cambiar del servidor Sql a Oracle? Esto es posible y relativamente fácil con LLBLGen, mientras que con el código nHibernate codificado manualmente, tiene que volver a escribir todo lo que es prácticamente imposible de justificar en función de los costos.

Frans también estuvo disponible y respondió algunas de mis preguntas.

Cuestiones relacionadas