13 julio 2006

Pepi, Luci y Bom y otros ORMs del montón II

Pues nada volvemos al ataque con otro estudio sobre ORMs gratuitos:
Parece mentira, pero cuanto más ORMs veo más me gusta Gentle.NET, es verdad que tiene características que no me convencen pero también es verdad que el resto de ORMs me convencen bastante menos.
Paso a comentar los dos a los que le he echado un vistazo:

Nota: No espereis un profundo análisis, es un simple primer vistazo.

DomainObjects:

  1. Para cada clase hay que crear un constructor (protected) con todas las propiedades como parámetros para que el gestor pueda "reconstruir" los objetos. Supongo que además deberán estar en el mismo orden que las columnas de la abse de datos. No me gusta.
  2. Para usar una propierty y que el gestor se de cuenta de que esta ha modificado una variable mapeada hay que añadir a la property el atributo [Mutator]. Dejando aparte lo orrendo del nombre, ¿no serían mutadores todas las propiedades?
  3. El mapeado se realiza con archivos XML.
Grove:

  1. La carga de entidades se realiza en vez de usando el generic pasando el typeof. Posiblemente porque aún no estaba disponible esta posibilidad.
  2. En todas las consultas las condiciones se añaden como ¡cadena de texto!, esto es, new ObjectQuery(typeof(Customer), "this.State='WA'"). Esto no es ni muy eficiente ni muy cómodo.
  3. Distingue entre insertar un nuevo objeto (Insert) o actualizar uno ya existente (Update). Consecuencia de no exigir heredar de una clase base.
  4. Es posible realizar transacciones, indicandole al gestor cuando empieza, cuando termina y si hay que hacer roleback. Esta caracterísitca es interesante y como aún no la hemos estudiado nosotros no estoy en disposición de verle los problemas.
  5. Si se realiza un interesante intento de poder definir objetos almacenados en multiples tablas, pero con una aproximación que creo que es compleja y requiere introducir información muy cercana al nivel de acceso a datos y además redundante. Con un poco de esfuerzo se podría pulir, aunque se agradece que nos aporte una aproximación.
Con todo esto, va tomando más poder Gentle.NET, solo me queda intentar investigar si es posible realizar herencia de clases y que las propiedades de cada uan vayan a la tabla que le corresponda.

Ahh, se me olvidaba, aún me queda un ORM en al recámara. Retina.NET, que ya veremos si aporta algo nuevo.

Etiquetas:

2 Comments:

Blogger Bernardo said...

Estuve echando un ojo muy rápido a Retina.NET y decidí descartarlo, creo que más por el empacho que tengo de ORMs que porque realmente encontrara algo que no me gustara.

Tras unos días reposando las ideas me he puesto manos a la obra para ver lo que más me preocupa de Gentle, que no es otra cosa que si soporta herencia de objetos (que no es trivial). Pongamonos en situación, yo tengo un objeto A que hereda de Persitent, esto me da la posibilidad de cargar y guardar objetos en el origen de datos. Ahora, si yo creo un objeto B que hereda de A pero añadiendo más propiedades y definiendo un atributo tabla distinto, si intento guardar este objeto B ¿Guardará las propiedades que corresponden a A en la tabla asociada a A y las que corresponden a B en la asocaida B?
Pues no.

Es un palo, porque esta capacidad es fundamental, ¿como voy a diseñar una aplicación sin herencia? o lo que no se si es peor ¿tengo que crear una única tabla con todos los campos del arbol de herencia del objeto A, y definir un campo más que me vaya discriminando que tipo de objeto es el de la fila leida?

Mi gozo en un pozo. Deberé abandonar Gentle, aunque haré un último intento buceando en los foros para ver si alguien ah encontrado la solución.

Pero todo no son malas noticias, hoy he estado con Ramón mirando lo de su proyecto y buceando en XPO y NHibernate hemos visto que si soportan esta funcionalidad. Oe, oe oe.

Observaciones:
Trasteando con XPO (me encanta como crea el solo la base de datos), veo que si en la clase no defines un identificador él te crea una clave primaria, también crea una columna de valor entero para controlar la concurrencia (otro más que opta por esta solución) y lo que má me ha gustado es que es capaz de relacionar las tablas de un objeto padre y uno hijo. El problema es que es de pago.

Trasteando con NHibernate he visto como también permite la herencia y es gratuito aunque el porblema es que no lo hace a nivel de atributos sino en un XML, y esto es algo que no me gusta mucho. Además según me comenta Ramón configurarlo es un infierno.

19 julio, 2006 18:41  
Blogger Bernardo said...

Estuve echando un ojo muy rápido a Retina.NET y decidí descartarlo, creo que más por el empacho que tengo de ORMs que porque realmente encontrara algo que no me gustara.

Tras unos días reposando las ideas me he puesto manos a la obra para ver lo que más me preocupa de Gentle, que no es otra cosa que si soporta herencia de objetos (que no es trivial). Pongamonos en situación, yo tengo un objeto A que hereda de Persitent, esto me da la posibilidad de cargar y guardar objetos en el origen de datos. Ahora, si yo creo un objeto B que hereda de A pero añadiendo más propiedades y definiendo un atributo tabla distinto, si intento guardar este objeto B ¿Guardará las propiedades que corresponden a A en la tabla asociada a A y las que corresponden a B en la asocaida B?
Pues no.

Es un palo, porque esta capacidad es fundamental, ¿como voy a diseñar una aplicación sin herencia? o lo que no se si es peor ¿tengo que crear una única tabla con todos los campos del arbol de herencia del objeto A, y definir un campo más que me vaya discriminando que tipo de objeto es el de la fila leida?

Mi gozo en un pozo. Deberé abandonar Gentle, aunque haré un último intento buceando en los foros para ver si alguien ah encontrado la solución.

Pero todo no son malas noticias, hoy he estado con Ramón mirando lo de su proyecto y buceando en XPO y NHibernate hemos visto que si soportan esta funcionalidad. Oe, oe oe.

Observaciones:
Trasteando con XPO (me encanta como crea el solo la base de datos), veo que si en la clase no defines un identificador él te crea una clave primaria, también crea una columna de valor entero para controlar la concurrencia (otro más que opta por esta solución) y lo que má me ha gustado es que es capaz de relacionar las tablas de un objeto padre y uno hijo. El problema es que es de pago.

Trasteando con NHibernate he visto como también permite la herencia y es gratuito aunque el porblema es que no lo hace a nivel de atributos sino en un XML, y esto es algo que no me gusta mucho. Además según me comenta Ramón configurarlo es un infierno.

19 julio, 2006 18:41  

Publicar un comentario

<< Home