2010-01-22 20 views
12

Si bien esta es una pregunta subjetiva, como un nuevo usuario de NHibernate, tengo curiosidad de por qué uno elegiría el mapeo XML tradicional versus fluido.¿Por qué fluidez NHibernate vs. hbm archivos XML?

Desde mi punto de vista, cuando trabajé con NHibernate, utilicé la interfaz Fluent, pero tropecé con algunos obstáculos y tuve dificultades para encontrar la documentación adecuada para la interfaz Fluent para algo más que una 'aplicación de juguete', así aprendí manejar estos a través de XML.

Con el tiempo, me di cuenta de que hice la mayor parte de mi trabajo en el lado de XML, y me di cuenta de que no era tan horrible como pensé que sería. Así que, personalmente, fue un caso de documentación deficiente y no se obtuvieron ahorros significativos en el tiempo de codificación.

Dicho esto, puede que haya una gran ventaja/desventaja que me falta, y realmente me gustaría escuchar algunas opiniones de personas que tienen más experiencia en el trabajo con estas herramientas.

Respuesta

16

La seguridad y la refactorización en tiempo de compilación (cambio de nombre de clases, propiedades) son una de las ventajas que se obtienen de las asignaciones fluidas. El uso de un idioma (C# o VB.NET) para escribir asignaciones, código de programa y acceso a datos es otro beneficio.

+0

De hecho, tengo una pregunta sobre eso. Recuerdo que Fluent lanzaría un buen error de compilación si mi archivo de mapeo estuviera desactivado, pero ¿me ayudaría si escribiera mal una columna en la tabla, o estaría depurando la excepción como lo hago ahora cuando explota mi hbm XML? ¡Gracias por la respuesta por cierto! –

+0

No hay nada que lo salve si escribe mal el nombre o la columna de una tabla. –

6
  • nombre- tiempo de compilación y la seguridad de tipos
  • IntelliSense que le muestre qué métodos fluidas están disponibles en cualquier punto
  • defecto personalizables
  • AutoMapper
+0

Obtiene IntelliSense en XML también con NHibernate XSD Schema. –

+0

Obtiene el IntelliSense basado en los esquemas de hibernación, pero no en su modelo de objetos. – yfeldblum

+1

+1 para la automatización, que IMO es la única "clavada real". Los otros beneficios son agradables, pero no alucinantes. – Aaronaught

0

Como muchos de abierto software fuente, esta biblioteca estuvo disponible para el público antes de que muchas de las funciones estuvieran listas para producción. Según la versión de FluentNhib con la que esté trabajando, es posible que algunas funciones no se hayan implementado en absoluto. Por ejemplo, cuando comencé a trabajar con él, las claves compuestas no se habían implementado aún y encontré un obstáculo después de un obstáculo.

Pero el producto se ha convertido en una herramienta bastante buena. Es una característica bonita completa en comparación con xml y ofrece todos los beneficios que otros ya han descrito.

3

Para mí, la gran característica de Fluent es el Automapper.

Puedo definir mi modelo de dominio usando clases POCO, (principalmente) sin preocuparme por los desagradables detalles de cómo se mapearán en tablas en una base de datos relacional.

Como desarrollador de OO desde hace mucho tiempo, y desarrollador ocasional de bases de datos, me siento mucho más cómodo diseñando en una moda OO. También creo que esto me permite trabajar a un nivel de abstracción más alto y más poderoso.

La automatización también hace que los cambios continuos en el modelo de dominio sean menos desalentadores.

¿Sus clientes le acaban de decir en el último minuto que desean agregar cuatro nuevas columnas a la base de datos?

No hay problema: agregue cuatro nuevas propiedades al POCO asociado (4 líneas de código) y reasigne.

Elimina en gran medida los requisitos en constante cambio que son una realidad en muchos proyectos.

2

Voy a añadir una razón que es muy importante para hacer funcionalidad personalizada basada en una base de código común:

Con fluidez se puede anular asignaciones para agregar un nuevo campo. Los cambios en las asignaciones existentes (superclase) se incorporan automáticamente en la personalización/sucursal. Me vi obligado a usar Fluent para evitar mantener un archivo separado .hbm/xml para cada cliente. Me alegro de haberlo hecho :)

+0

Disculpe, pero ¿puede aclarar cómo es esto mejor que actualizar el xml? – ArtB

Cuestiones relacionadas