Foros del Grupo Albor

Un lugar de encuentro para los programadores de habla hispana

Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
 
   Inicio   Buscar Ingresar Registrarse  
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: Cosas que me gustaría que tenga el ORM  (Leído 2281 veces)
Adrián De Armas
Moderador
*****
Desconectado Desconectado

Mensajes: 19


« : 18 de Febrero de 2009, 16:37:33 »

Este post va a ser una especie de recordatorio de aquellas cosas que quisiera que tenga el ORM y que hoy no tiene.
Pueden ir agregando cosas según sus necesidades. Por ahora no voy a tener tiempo de andar desarrollando pero tal vez alguien le interesa el tema y se larga a hacerlo.
Al ORM quisiera agregarle:
  • Poder usar el ORM en otras versiones de Delphi y en Lazarus tambien sería interesante
  • Drivers para Oracle, el "runtime" es muy parecido, sino igual, al de firebird
  • Drivers para MySQL, el problema con MySQL es que solo InnoDB maneja relaciones  y por ende, integridad referencial. Otra opción es crear en el ORM la posibilidad de crear relaciones sin que estas estén apoyadas en relaciones creadas en la BD
  • Manejar las vistas y los storeprocedures desde el ORM
  • Tener la posibilidad de crear Listas con campos expresiones ( Nombre + ', ' + Apellido)
  • Tener un Generador de conexiones (uSQLConnectionGenerator.pas) con pool de conexiones para "server side"
  • Poder cambiar dinamicamente a que base de datos se ataca sin la necesidad de recompilar
  • Que el ORM pueda crear el script de creacion de la BD a partir de un archivo .do
  • Documentación... wink

¿A alguien se le ocurre algo mas?

Saludos
« Última modificación: 18 de Febrero de 2009, 16:40:20 por Adrián De Armas » En línea
rydem
Newbie
*
Desconectado Desconectado

Mensajes: 4


« Respuesta #1 : 19 de Febrero de 2009, 03:34:42 »

Mi opinión personal respecto a amarrarlo a una BD no la creo satisfactoria, a no ser que sea opcional, por experiencia te digo que eso trae sus dilemas, por ejemplo si usas un framework como nhibernate, etcs para la BD ya no puedes usarlo con estos componentes, porque se conectan independientes.

O lo pones como una alternativa o no, es mi opinión personal.

No has pensado la posibilidad de Orientarlos a Clases, en vez de mostrar una tabla, mostrar la entidad de negocio que representa dicha tabla, me refiero a que visualizas ciertos atributos de una entidad, y a la hora de seleccionarla la coges completa.
Para darte una mejor idea, tengo en .Net un listView que se le adicionan objetos, y se visualizan del mismo las propiedades que deseo, es generico, sirve para cualquier entidad, hacen gran cantidad de validaciones de forma autónoma, que se ponen en el tiempo de diseño, y a la hora de ejecutar es tirar solo el código de la lógica necesaria, no más, en realidad son más componentes, los hice pensandolo para Delphi, pero por algunos percances de la vida los desarrollé sobre .Net.
En línea
rydem
Newbie
*
Desconectado Desconectado

Mensajes: 4


« Respuesta #2 : 19 de Febrero de 2009, 03:53:26 »

No sería más útil hacer un framework por asi decirlo para que se encargue de las conexiones a BD, y operaciones de Ins,Del,Upd, y que entreguen al negocio entidades, digamos conversión de tablas a entidades, y viceversa, a la hora de salvar salvo entidades y este salva en las respectivas tablas, orientando a como se usan hoy por hoy en los frameworks como nhibernate, pero agregando algunas mejoras, que en lo personal pienso que se le pueden agregar.
En línea
Adrián De Armas
Moderador
*****
Desconectado Desconectado

Mensajes: 19


« Respuesta #3 : 19 de Febrero de 2009, 13:11:23 »

Mi opinión personal respecto a amarrarlo a una BD no la creo satisfactoria, a no ser que sea opcional, por experiencia te digo que eso trae sus dilemas, por ejemplo si usas un framework como nhibernate, etcs para la BD ya no puedes usarlo con estos componentes, porque se conectan independientes.
O lo pones como una alternativa o no, es mi opinión personal.

Hola, tal vez he escrito mal algo en alguna parte, pero toda la idea detrás del ORM es poder abstraer la conexión y la manipulación específica del SQL, osea, lo que se busca es no amarrar a ninguna base de datos tu aplicación. Hasta hoy esto se puede lograr con el ORM solo que hay que vincular los manejadores específicos de BD a tu aplicación pero esto no quiere decir que mientras programas estés pensando contra que BD estás trabajando, siempre estás usando clases.
Por lo tanto, podrías tener la misma aplicación (exactamente el mismo código) funcionando contra una u otra base de datos a una compilación de distancia. Esto se podría hacer dinamicamente con el uso de bpls y es uno de los temas que me gustaría tener resuelto en breve para que la misma aplicación funcione contra una u otra BD simplemente cambiando un archivo (bpl o dll).

No has pensado la posibilidad de Orientarlos a Clases, en vez de mostrar una tabla, mostrar la entidad de negocio que representa dicha tabla, me refiero a que visualizas ciertos atributos de una entidad, y a la hora de seleccionarla la coges completa.
Para darte una mejor idea, tengo en .Net un listView que se le adicionan objetos, y se visualizan del mismo las propiedades que deseo, es generico, sirve para cualquier entidad, hacen gran cantidad de validaciones de forma autónoma, que se ponen en el tiempo de diseño, y a la hora de ejecutar es tirar solo el código de la lógica necesaria, no más, en realidad son más componentes, los hice pensandolo para Delphi, pero por algunos percances de la vida los desarrollé sobre .Net.

Hoy con el ORM solo trabajas a través de clases. Cada clase representa una tabla y sus relaciones.
El código que se genera con el ORM hace que tengas propiedades públicas por cada campo de la BD, tengas propiedades que apuntan a otra Entidad (para relaciones 1 a 1) y Colecciones de entidades (para relaciones 1 a n).
Sería muy interesante poder tener un listview como el que mencionas... No veo problema para realizar algo parecido a lo que tienes en .NET para Delphi basándose en la información que expone cada clase sobre la tabla a la que mapea.
En línea
Adrián De Armas
Moderador
*****
Desconectado Desconectado

Mensajes: 19


« Respuesta #4 : 19 de Febrero de 2009, 13:13:24 »

No sería más útil hacer un framework por asi decirlo para que se encargue de las conexiones a BD, y operaciones de Ins,Del,Upd, y que entreguen al negocio entidades, digamos conversión de tablas a entidades, y viceversa, a la hora de salvar salvo entidades y este salva en las respectivas tablas, orientando a como se usan hoy por hoy en los frameworks como nhibernate, pero agregando algunas mejoras, que en lo personal pienso que se le pueden agregar.

Esto es exactamente lo que hace hoy el ORM.
« Última modificación: 19 de Febrero de 2009, 14:44:03 por Adrián De Armas » En línea
rydem
Newbie
*
Desconectado Desconectado

Mensajes: 4


« Respuesta #5 : 19 de Febrero de 2009, 15:17:35 »

Actualmente no tengo instalado el delphi, planeo reinstalar la PC, por eso no he podido revisar el código, solo he ojeado superficialmente algunas cosas.
Quizás interpreté mal, pero me pareció que el combobox se encarga de conectarse solo a la BD, mi idea, es que los controles visuales no toquen la BD, eso es de otra capa de negocio, que la soliciten ahí, o sea, que no haya violación de capas de negocio entre presentación y BD, no digo que la haya, solo que eso fue lo que interpreté de lo que he visto hasta el momento.
En línea
Adrián De Armas
Moderador
*****
Desconectado Desconectado

Mensajes: 19


« Respuesta #6 : 19 de Febrero de 2009, 15:32:24 »

Quizás interpreté mal, pero me pareció que el combobox se encarga de conectarse solo a la BD, mi idea, es que los controles visuales no toquen la BD, eso es de otra capa de negocio, que la soliciten ahí, o sea, que no haya violación de capas de negocio entre presentación y BD, no digo que la haya, solo que eso fue lo que interpreté de lo que he visto hasta el momento.

En realidad el combo no se conecta a la BD, es la entidad que se conecta y llena el combo (en realidad el TStringList) pero entiendo lo que querés decir y también pienso que esa mezcla de tapas no es lo mejor.
Coincido con vos que sería recomendable (para quien así le guste) no mezclar negocio con acceso a datos.
Particularmente tengo hasta las aplicaciones de escritorio internamente escritas en 3 capas:
  • La capa de presentación (Hace interfaz con la capa de negocio)
  • La capa de negocio (Hace interfaz con el ORM)
  • El ORM para el acceso a los datos (el ORM que hace interfaz con dbexpress)

De esta manera el código tarda un poco mas en escribirse pero, en mi experiencia, el mantenimiento resulta mucho mas fácil, se pueden atacar problemas puntualmente.
Generalmente no hago que un combo se llene directamente desde una entidad, sino, que se hace desde la capa de negocio.
Para aplicaciones, no sistemas, hay veces que el trabajo a realizar es tan "pobre" que hacerlo en una única capa es lo mas sencillo.

Finalmente el ORM se encarga del acceso a datos y brinda algunos métodos para facilitar algunas cosas (como cargar un combo), ahora la programación en capas no deja de ser una decisión del programador, el ORM no busca imponer la forma de trabajar. Igualmente coincido con vos, para mi trabajar de esa manera es lo que mas satisfacciones me ha dado.

Saludos
« Última modificación: 19 de Febrero de 2009, 15:40:55 por Adrián De Armas » En línea
Maximilianop
Newbie
*
Desconectado Desconectado

Mensajes: 1


« Respuesta #7 : 20 de Febrero de 2009, 19:29:55 »

Hola, todavía no tuve tiempo de ver el ORM.
Lo que sí, leyendo lo que gustaría que se agregue, recordé un tema que hace mucho me gustaría que es la posibilidad de utilizar un Dataset sin lógica de almacén o acceso a BD, sino acceso a una colección de objetos. ¿Por qué? Para no perder la facilidad y reducción de código de la capa de presentación de los controles DBAware; a la ves que tenemos los objetos para todo lo que sea código.

Algo así vi una ves en el CodeCentral un TObjectDataSet, el cual no era totalmente lo que estaba buscando.
Y otro más, del cual no recuerdo el nombre, que publicaba eventos para leer y ejecutar acciones en los datos.

Sería bueno si en el paquete del DelphiORM se incluyera algo así.
En línea
Adrián De Armas
Moderador
*****
Desconectado Desconectado

Mensajes: 19


« Respuesta #8 : 20 de Febrero de 2009, 19:59:18 »

Hola, todavía no tuve tiempo de ver el ORM.
Lo que sí, leyendo lo que gustaría que se agregue, recordé un tema que hace mucho me gustaría que es la posibilidad de utilizar un Dataset sin lógica de almacén o acceso a BD, sino acceso a una colección de objetos. ¿Por qué? Para no perder la facilidad y reducción de código de la capa de presentación de los controles DBAware; a la ves que tenemos los objetos para todo lo que sea código.

Maximiliano, el ORM usa un componente llamado SnapDataSet por lo que puedes transformar una coleccion de entidades en un dataset sin problemas.
En el ejemplo que subi del ORM las colecciones se muestran directamente en un dbgrid como se haría con cualquier dataset.
El tema de modificar los datos de una entidad desde un componente dbaware tambien debería estar resuelto. El unico problema es que los datos se modifican en la colección por lo tanto, si la colección no se guarda, se pierden las modificaciones.
Si tu código puede hacer un "DataSet.Post" y luego "Coleccion.Guardar", todo debería funcionar como esperas.
Si lo pruebas y tienes algun problema podremos investigarlo juntos.

Saludos cordiales
« Última modificación: 21 de Febrero de 2009, 22:40:35 por Adrián De Armas » En línea
Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Foros del Grupo Albor | Impulsado por SMF 1.1.16.
© 2005, Simple Machines. Todos los Derechos Reservados.
XHTML 1.0 válido! CSS válido!
Página creada en 0.215 segundos con 19 consultas.