c# nhibernate castle-activerecord

c# - ¿Cuáles son los pros y los contras de utilizar Castle Active Record vs Straight NHibernate?



castle-activerecord (3)

El mayor profesional de AR es que le proporciona un repositorio preparado y se ocupa de la gestión de la sesión por usted. Cualquiera de ActiveRecordBase<T> y ActiveRecordMediator<T> son un regalo que usted habría terminado ensamblando usted mismo bajo NHibernate. Evitar el mapeo XML es otra ventaja. Los atributos de mapeo AR son simples de usar, pero lo suficientemente flexibles como para mapear incluso bases de datos "heredadas".

La mayor estafa de AR es que lo alienta activamente a pensar incorrectamente sobre NHibernate. Es decir, dado que la gestión de sesión predeterminada es sesión por llamada, te acostumbras a la idea de que los objetos persistentes están desconectados y tienen que ser Save() d cuando ocurren cambios. No se supone que NHibernate funcione así: normalmente tendrías sesión por unidad de trabajo o solicitud o subproceso, y los objetos permanecerían conectados durante el ciclo de vida de la sesión, por lo que los cambios se conservarán automáticamente. Si comienzas a utilizar AR y luego descubres que necesitas cambiar a sesión por solicitud para hacer que la carga lenta funcione, lo que no está bien explicado en los documentos, te sorprenderá cuando un objeto que no esperabas guardarse lo hace cuando la sesión se vacía.

Tenga en cuenta que el equipo de Castle escribió AR como un producto complementario para Castle Monorail, que es un framework tipo Rails para .NET. Fue diseñado con este tipo de uso en mente. No se adapta bien a un diseño desacoplado en capas.

Úselo como lo que es, pero no lo piense como un acceso directo a NHibernate. Si desea utilizar NH pero evita mapear archivos, use NHibernate Attributes o mejor, Fluent NHibernate.

Suponiendo que escribir archivos de mapeo nhibernate no es un gran problema ... o contaminar los objetos de tu dominio con atributos tampoco es un gran problema ...

¿Cuáles son los pros y los contras?

¿Hay algún problema técnico fundamental? ¿Qué tiende a influir en la elección de las personas?

no estoy seguro de cuáles son las compensaciones.


Cuando comencé a usar NHibernate , no aprendí acerca de Castle ActiveRecord hasta que escribí mis archivos de Mapeo e hice mis clases. En ese momento, no pude discernir visiblemente qué Castle Activerecord me daría, así que no lo usé.

La segunda vez que utilicé NHibernate, simplemente utilicé myGeneration para crear los archivos de mapeo y las clases solo haciendo que mirase en mi base de datos. Eso me ahorró mucho tiempo y me permitió (una vez más) no preocuparme por Castle Active Record.

En realidad, la mayor parte de su tiempo se gastará en realizar consultas personalizadas, y Castle Active Record no necesariamente ayudará con eso: si utilizara myGeneration con NHibernate, omitiría la mayor parte del trabajo que hubiera realizado. necesidad de hacer de todos modos.

Editar: No quiero parecer una animadora de myGeneration o NHibernate. Solo uso la herramienta que me permite hacer mi trabajo de forma rápida y fácil. Cuanto menos tiempo tenga para escribir el código de acceso a datos, mejor. No significa que no pueda hacerlo, pero tiene poco sentido reinventar la rueda cada vez que escribe una nueva aplicación. Escribir consultas SQL y procedimientos almacenados donde sea necesario, y en ningún otro lugar. Si está realizando operaciones CRUD, un ORM es el camino a seguir.

Editar # 2: Castle Active Record puede traer más a la mesa de lo que creo - No sé mucho más que lo que hay en su sitio web , pero si trae más sobre la mesa, entonces ayudaría a los posibles adoptantes a poder para ver fácilmente eso en su sitio.


Encontré que ActiveRecord es una buena pieza de kit, y muy adecuada para los proyectos pequeños / medianos en los que la he usado. Al igual que Rails, toma muchas decisiones importantes para ti, lo que tiene el efecto de mantenerte enfocado en la carne del problema.

En mi opinión, los pro y los contras son:

Pros

  • Le permite concentrarse en el problema en la mano, porque se toman muchas decisiones para usted.
  • Incluye clases de infraestructura maduras y muy útiles (Repositorio, Validaciones, etc.)
  • Escribir atributos de AR es más rápido que escribir XML o NHibernate.Mapping.Attributes en mi humilde opinión.
  • Buena documentación y apoyo de la comunidad
  • Es bastante fácil usar otras funciones de NHibernate con él.
  • Un comienzo seguro. Tienes una cláusula de salida. Puede regresar lentamente a una solución NHibernate a medida si golpea las paredes con AR.
  • Ideal para desarrollo de dominio primero (generando el db).
  • También es posible que desee buscar los beneficios y desventajas del patrón ActiveRecord

Contras

  • No puedes fingir que NHibernate no está allí; aún necesitas aprenderlo.
  • Puede que no sea tan productivo si ya tiene una base de datos heredada para trabajar.
  • Persistencia no transparente.
  • Las asignaciones integradas son completas, pero para algunos proyectos es posible que deba volver a las asignaciones de NHibernate en algunos lugares. No he tenido este problema, solo un pensamiento.

En general, realmente me gusta ActiveRecord y siempre me ha ahorrado tiempo, principalmente porque me parece feliz aceptar las decisiones y las herramientas ingresadas en la biblioteca, y luego dedicar más tiempo a enfocarme en el problema en cuestión.

Lo probaría en algunos proyectos y vería lo que piensas.