Estuve viendo el ejemplo de Ayende, parece la panacea. Adios a los
hbm??. Existe algún ejemplo concreto??.
Saludos
Qué piensan?
Lo que plantean es similar al modelo que sigue el ActiveRecord de Ruby on Rails, solo que la acción de crear las tablas y sus relaciones a partir del modelo de objetos se hace por medio de un script.De hecho hay algunas críticas a Entity Framework, ya que es posible generar el modelo de entidades a partir de la definición de la base de datos y no a la inversa. El punto de partir de un modelo de objetos se vuelve más necesario para quienes practican TDD y modifican constantemente el modelo.Opiniones?
Los cambios en el modelo se solucionan con SchemaUpdate, que ya soporta varios RDBMS.
El punto que planteaba, es que la discusion sobre si conviene "generar" o no los mappings, en cuanto al tiempo que esto llevaría si se generan cada vez que se inicia la aplicación, (es este el escenario en que estas pensando?) se justificaria si tuvieramos automatizado tambien la propagación de los cambios a la BD. Porque sino salvo excepciones hay que parar la aplicación, para impactar los cambios de la BD, estoy hablando en el entorno de produccion, y aplicar manualmente los cambios con la consabida perdida de tiempo, en un entorno de testeo no me parece una discusión relevante.
Salvo que te entienda mal y que a lo que te estes refiriendo es que "configurar" directamente "on the fly" NH sea más rápido que levantar los .hbm para configurar la session.
Claudio
claudiomeschini.blogspot.com
Pienso que con C#4 implementar una libreria/fwk sencillo de mapping automático simil ActiveRecord en Rails va a ser sencillo (gracias IDynamicObject!). Estuve haciendo una pruebas y tengo un proto andando. Lo que no es posible evaluar con el CTP que hay disponible es la velocidad.
PD: Lo que se vio de EFX 2 en el summit promete...
From: altnet-a...@googlegroups.com [altnet-a...@googlegroups.com] On Behalf Of Dario Quintana [cont...@darioquintana.com.ar]
Sent: Saturday, March 21, 2009 12:02
To: altnet-a...@googlegroups.com
Subject: Re: ORuM
Sin ir más lejos, un framework más cercano que lo hace es Hibernate.Annotations (java).
Por otro lado, con EF, más allá de que pueda o no generar DDL (lo cual es muy bueno si lo hiciese), queda fuera de la ecuación, tiene un grado de intrusión muy alto como para poder pensarlo como hacer "mapping automático" o ORuM (como lo plantea Fabio).
Más alla de esas desventajas, EF tiene otras que no vienen al caso en este momento, creo que las habia expresado en las listas de c# del MUG el año pasado.
2009/3/21 Miguel Saez <miguel.a...@gmail.com>
Lo que plantean es similar al modelo que sigue el ActiveRecord de Ruby on Rails, solo que la acción de crear las tablas y sus relaciones a partir del modelo de objetos se hace por medio de un script.De hecho hay algunas críticas a Entity Framework, ya que es posible generar el modelo de entidades a partir de la definición de la base de datos y no a la inversa. El punto de partir de un modelo de objetos se vuelve más necesario para quienes practican TDD y modifican constantemente el modelo.Opiniones?
--
Dario Quintana
http://darioquintana.com.ar
Es largo explicarlo por mail por eso quiero sentarme con algunas mentes brillante y charlarlo.Por un momento olvidense de NH, EF etc. tambien olvidensen de tener un DSL en el cual tengo si o si que definir representaciones que tenga a que ver con persistenciaHago un ejemplo simple...Tomen un eschema de herencia.Usando tecnicas de ORM una herencia se puede persistir usando :table-per-classtable-per-class-hierarchytable-per-concrete-classEn algunos framework tambien se pueden usar tecnicas mixstas.Cual es el proceso mental que lleva a eleguir una representación en lugar que otra ?Si las decisiones que se toman son definidas, que es lo que me impide a que sea una implementación C# la que toma esas decisiones ?
Y qué haríamos si cuenta tiene dos propiedades Cuenta, digamos
> En tu caso sería
> Si Cuenta tiene un IEnumerable<Cuenta> y Cuenta tiene una propiedad de tipo
> Cuenta se aplica "inverse". (o sea que se aplicaría)
CuentaPadre y CuentaDeReversion. Obviamente la segunda no tiene nada
que ver con CuentasHijas.
Con respecto al ejemplo de herencia otro factor que podría influir es
si necesitamos que las propiedades de las sub clases no permitan
nulos, en este caso subclass (es decir Table per class hierarchy) no
es aplicable. Si las hijas solo poseen propiedades nullables (int?,
string?..blabla), podría usarse TCH. (se me ocurre al vuelo, es esto
a caso un brainstoriming?)
A no ser que..............A nivel bd TODO permita valores nulos y el
framework maneje en otro nivel de asbtracción cuando un valor del
dominio pueda o no tener nulo.
Quizas sea una obviedad lo que voy a decir, pero el concepto de ID-
claveprimaria es totalmente relacional. (de clave foranea ni hablar)
Cualquier dato en una bd relacional puede ser accedido a traves de
clave primaria de la entidad + nombre de campo..yadda yadda, el modelo
relacional necesita claves primarias.
En el modelo OO no. Pero de alguna forma necesitamos obtener una
instancia.. en sharp architecture hay algo que se usa para los
equality members, llamado 'domaing signature'. Dos objetos son iguales
si tienen la misma 'domaing signature', que es un atributo o conjunto
de ellos.
En conclusión, haganse la idea de que queremos hacer un ODBMS, pero sin tener que usar System.IO, queremos tener la teoria para poder persistir objetos, como ciudadanos de primera clase, en bases de datos relacionales.
En que estan pensando?
Hablo de los objetos, mas alla de su persitencia, diría yo...
Por eso fijate que hablo de conceptos de modelado de objetos, que podrían incluso no persistirse jamas.
Lo que digo es que en definitiva si se quiere llevar algo al modelo relacional y estos adornos existen se pueden aprovechar y lo bueno es que no estan expresados en términos de persistencia, solo en ciclo de vida y el ciclo de vida no es un concepto de persistencia.
Digamos que me pongo de costado para mirarlo de ese punto de vista y como que se ven algunas cosas que desde el frente no veo.
Daniel
Fabio, en este hilo mencionaste las palabras "Gurues" y "mentes
brillantes", y yo creo que no entro en nignuna de las dos categorías.
Es excluyente para la reunión?
Si necesito metadata para la UI y la meto en el dominio, uhmmm
O, según tu planteo, no la meto en e dominio pero la meto en un repositorio comun a toda la metadata. otro uhmmm...
Y si voy a hacer remoting? o ws?, no necesitate otra metadata especifica tambien?, o workflow? o alguna otra cosa que saque ventaja de la metadata?
Entonces agarro mi algunFile.metadata y meto todo ( me quedo redundante... )
Pero esto orientado a la metadata, divide y triunfarás?
Si... podria ser.. pero te respondo con palabras de Daniel Calvin: "O,
según tu planteo, no la meto en e dominio pero la meto en un
repositorio comun a toda la metadata. otro uhmmm..."
2009/3/23 Fabio Maulo <fabio...@gmail.com>:
(ambas ideas requieren muuuucho trabajo)
Esta buena tu frase (espero que no sea una manera cordial de decir "te
mandaste cualquiera")
cito aca lo ultimo sobre el garbage collector:
An ODBMS with Garbage Collection
based object removal completely eliminates this
problem. Persistent objects are only “deleted” once they
are no longer referenced by any other instances
reachable from a well-defined root object. (...)
Como para pensar fuera de los estandares de RDBMS, me preocupa como escala cualquier store en precencia de sharding, y evoluciones de esquema "live".
Un interesante articulo al respecto: http://bret.appspot.com/entry/how-friendfeed-uses-mysql
Quizas hay q ser mucho mas drasticos?? ;)
"Fabio, osea que si llevo el diploma de programador 3 estrellas por
ahi puedo pasar?"
Che.Tengo("MiDominio.dll").Que.TieneQuePersistirEn("ORACLE").FijateVos();