Db4o + Spring Modules y configuración
Una de las cosas que me llama notablemente la atención, es la imposibilidad de poder configurar Db4o por medio de Xml, siendo algo tan común hoy en día y por sobre todo naciendo en Java.
La respuesta del lado de Java está justificada, no así del todo del lado de .Net. En Java, yo creo que la mayoría de los que usan Db4o usan el módulo de Spring para poder configurarla y obviamente no solo para eso, para usar las ventajas de IoC y Aop que posee Spring.
Algo básico que permite el módulo de Spring para Db4o es la capacidad de envolver a métodos que uno seleccione (y configure correctamente) en transacciones, de modo de abstraernos de este aspecto a nosotros.
Por que digo que no está tan justificado del lado de .Net, por que Spring del lado de .Net no es tan aceptado como lo es del lado de Java, que es donde nació. Y entonces mucho menos será entonces la adopción de dicho módulo pero para .Net.
Que lindo sería si se podría configurar Db4o de esta manera:
<?xml version="1.0" encoding="utf-8" ?> <db4o assembly="db4oif.Test" namespace="db4oif.Test.Objects"> <class name="Customer"> <field name="_id" unique="true" indexed="true"/> </class> <class name="Product"> <field name="_name" unique="true" indexed="true"/> </class> <class name="db4oif.Test.Objects, db4oif.Test"> <field name="_name" unique="true" indexed="true"/> </class> </db4o>
Cualquier semejanza con un mapping file de NHibernate es pura coincidencia
Esto lo había expuesto aquí en el foro de la comunidad de Db4o, algún día espero tomarme el tiempo para escribir las clases de configuración, pero supongo que terminaré usando el módulo Spring que ya lo hace por mí (entre otras cosas).
SessionImpl, Unit Testing… y las flores siguen en la mesa
El truco de sacar el mantel y que el florero quede en el centro de la mesa intacto lo hizo el Sr. Fabio Maulo con una de las clases más importantes del core de NHibernate: SessionImpl.
El la versión 1.2.x la session es de 5819 lineas de código.
Después de la modificación quedó en 3819.
Hagan las cuentas y son muchas lineas de código para tirarlas a la basura sin pensarlo! Claro, pero toda la tranquilidad viene del lado de las pruebas de unidad, que es practicamente lo que mantiene viva a la integridad en NHibernate.
Después de esto, uds sacarán sus conclusiones: si vale ponerle atención a las pruebas de unidad en nuestros proyectos, si es muy laborioso como para prestarle atención, o es una inversión y una tranquilidad sabiendo que la aplicación a medida que va creciendo en el ciclo de desarrollo se vá integrando bien.
Otra cosa a resaltar:
Hay muchos que para probar algo crean un proyecto de consola, prueban una clase y luego tiran el proyecto. Bueno… ya que hay que probar conviene escribir la prueba una sola vez y
verificar que siga funcionando siempre.
Totalmente de acuerdo, y hasta hace un tiempo yo hacia esto… me incluyo y lo reconozco. Al principio, al iniciarte en el arte de las pruebas de unidad puede que no se note la diferencia entre un test y una sesión de debug, puede que los tests los hagas mal, o puede que no sean muy legibles, pero todo se mejora con un poco de ejercicio.
Y lo más lindo del resultado de usar pruebas de unidad es que cuando terminás de hacer las modificaciones pertinentes, realizás las pruebas, hacés commit…y
puedo dormir tranquilo.
uNHAddins: UnOfficial NHibernate AddIns
Fabio Maulo, con quien tengo el honor de moderar a NHibernate-Hispano, ah puesto a nuestra disposición este nuevo proyecto llamado uNHAddIns.
UnOfficial NHibernate Addins nos provee recursos para interactuar con NHibernate que no están en la versión Oficial de NHibernate, una especie de paquete Contrib, al cual podemos hacer llegar requerimientos ó inquietudes para tenerlas en cuenta y en un futuro hacerlas formar parte del framework.
Por ahora, ya podemos disfrutar de features: DetachedCriteria, DetachedQuery, DetachedDynQuery y Pagination.
DetachedQuery es el hermano de DetachedCriteria. DetachedCriteria existe actualmente en el core de NHibernate, pero no habia algo similar para HQL.
Se utiliza DetachedQuery/DetachedCriteria en lugares donde no contamos con una ISession. Es un modo de retardar hasta el ultimo momento la asociación del query con la sesión y esto ayuda a jugar mucho en las implementaciones de DAO Genericas.
Recursos:
- Página del Proyecto
- Grupo de Discusión de uNHAddIns.
- LesTroisMousquetaires:DetachedCriteria,DetachedQuery y DetachedDynQuery
- Descargas
Luego postearé codigos de ejemplo, pero pueden unirse al grupo de discución para hacer llegar las preguntas.