Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Pedido a los miembros de Foro (https://www.clubdelphi.com/foros/showthread.php?t=31715)

waltergomez 16-05-2006 02:56:32

Pedido a los miembros de Foro
 
Hola a todos,

Hace un tiempo que tengo ganas de iniciar un proyecto para que usen otros desarrolladores y me incline por un motor de persistencia para Delphi.
Esto recien empieza y tengo escrito muy poco, pero si alguien me envia informacion al respecto o que caracteristicas consideren importantes en lo referente a persistencia sera muy agradecido.
Todo suma, ejemplos, otros desarrollos exitentes, url, articulos, tutoriales, etc.
Muchas Gracias.

Walter Gomez

ElKurgan 16-05-2006 09:24:44

Algunas direcciones:

sourceforge Delphi Persistent Object:
http://sourceforge.net/projects/depo

Object Persistence Framework for Object Pascal :
http://groups.yahoo.com/group/JEDI-Obiwan

Spider Object Database:
http://www.intervalsoftware.com/products.html

TechInsite Object Persistence Framework:
http://www.techinsite.com.au/Default.htm

Para empezar, creo que con estas vale..
Un saludo

Neftali [Germán.Estévez] 16-05-2006 10:16:57

Busca documentación de Scott Ambler y Joanna Carter. Tienen bastante sobre el tema.
Para empezar puedes mirar:
Introducción genérica a los OPF's
Diseño de una capa de persistencia para BD relacionales
Cómo mapear los objetos sobre una BD relacional
Aquí tienes otro diseño de OPF de Robert Dawson
Instant Objects (SourceForge), OPF para Delphi/Kylix/FPC

En general, por internet puedes encontrar bastante información; Mucha sobre Java y bastante menos sobre Delphi, pero si biscas se puede encontrar para empezar.

Si tienes dudas concretas, puedes preguntar, yo he trabajado diseñando OPF's y te puedo hablar sobre mi experiencia personal pero,siempre sobre algo concreto, ya que el tema es muy amplio.

roman 16-05-2006 18:22:41

Algo le pasa al enlace de Robert Dawson.

Mi opinión sesgada ;) Para empezar yo omitiría a Joanna Carter. Tiende a hacer infinitamente complicadas las cosas más sencillas. Aún así, tanto lo que ella escribe como muchos otros, hay mucho material suelto en los grupos de noticias de borland (el de oodesign) que pueden buscar via google o tamaracka.

// Saludos

waltergomez 17-05-2006 02:46:24

Muchisimas gracias a todos y cuando tenga un beta lo publico.

Salu2,

Walter.

Neftali [Germán.Estévez] 17-05-2006 10:19:27

Cita:

Empezado por roman
Algo le pasa al enlace de Robert Dawson.

Le pasaba, que yo lo había puesto mal. :(
Corregido.

roman 17-05-2006 17:36:43

Propiamente habría entonces que especificar que se trata de material de Phillip Brown más no de Robert Dawson.

// Saludos

lsg 09-07-2006 08:50:58

Yo tengo mi propio Framework
 
En base al framework de Phillip Brown yo he desarrollado mi propio framework de persistencia.

Que ademas interactua con mi propio framework visual (o sea, con forms heredados, etc).

Solo que lo comercializo, ya que me ha llevado muchisimo esfuerzo y creo que vale la pena.

Si alguien esta interesado, no dude en consultarme.
solution@interlap.com.ar

Neftali [Germán.Estévez] 10-07-2006 09:50:26

Cita:

Empezado por lsg
...solo que lo comercializo, ya que me ha llevado muchisimo esfuerzo y creo que vale la pena.

¿Y se puede ver alguna demo o similar? ¿Tienes página Web? ¿Documentación?

lsg 10-07-2006 22:16:12

Lamentablemente, todavia no he tenido tiempo de armar una documentacion ni de publicarlo en mi web www.solutionline.com.ar

Cuando pueda lo haré.

Si estas en Argentina, podria mostrartelo, o la otra posibilidad es mostrarlo remotamente con un Remote Administrator.

Ademas, este tipo de programacion necesita de mucho codigo, y ya no de componentes TDataset para hacer los diferentes selects, por lo que he creado con Delphi un pequeño ejecutable que en pocos segundos, en base a unos parametros que le indico, me arma todo el codigo de una clase (Entidad), ahorrandome mucho tiempo.

Estoy a disposicion de uds.

PD: En estos dias justamente estoy de project leader en una empresa donde migraremos su sistema con varios modulos originalmente hechos en Clipper hacia Delphi 7 con mi framework de persistencia y visual.

Neftali [Germán.Estévez] 11-07-2006 09:54:06

Cita:

Empezado por lsg
...Ademas, este tipo de programacion necesita de mucho codigo, y ya no de componentes TDataset para hacer los diferentes selects, por lo que he creado con Delphi un pequeño ejecutable que en pocos segundos, en base a unos parametros que le indico, me arma todo el codigo de una clase (Entidad), ahorrandome mucho tiempo.

Lo se. Mi interés es porque yo también estoy en el mismo tema que tú. En mi caso, el que tengo entre manos es el segundo frame de persistencia en el que trabajo (el primero fue para otra empresa).
Me gustaría comentar algunas cuestiones y decisiones que has tomado, problemas que te has podido encontrar, mapeo de tablas en Base de Datos que has escogido, cómo implementas los OID's (Identificadores de objetos), navegación entre objetos, cómo realizáis las busquedas, controles estandar de Base de Datos o propios, multiidioma,... (se me ocurren uchas más :D)


Cita:

Empezado por lsg
...en base a unos parametros que le indico, me arma todo el codigo de una clase (Entidad), ahorrandome mucho tiempo

En nuestro caso es a partir de los diseños en Rational Rose. Generamos el código de las clases y los Scripts para Base de Datos.

Cita:

Empezado por lsg
...donde migraremos su sistema con varios modulos originalmente hechos en Clipper hacia Delphi 7 con mi framework de persistencia y visual.

:eek::eek::eek: ¿No será la misma empresa?
Es broma, es que esta gente también trabajaba anteriormente con Clipper.

Un saludo.

lsg 11-07-2006 12:43:22

Bien.

OIDs: utilizo un unico OID por Base de datos, por registro.
Tengo un generador de IDS (una clase dentro del propio framework) que se reserva 15 ids, y una vez reservados nadie puede utilizarlos. Cuando necesita mas, vuelve a buscar otros 15.
Controles: Utilizo unas grillas comerciales, si bien podrian utilizarse otras.

Si bien trabajo con objetos, Una vez mapeada la tabla en el objeto, el mismo es mapeado en un ClientDataset, para poder manipular sus datos con controles DBAware. Y luego, vuelve del ClientDataset al objeto, y del objeto a la base de datos.

El ClientDataset lo utilizo con Fields creados por mi. No estan conectados a base de datos.

Las busquedas las realizo empezando el search por uno de los TPDList ( o lista de Objetos). Luego voy pidiendo mas datos.

Tengo ya una estructura armada y soporta multiidioma, aunque uno debe tomarse el trabajo de armar el diccionario y luego volcar sobre la parte visual cada palabra o mensaje.

Ademas, mi framework, crea Forms con un factory pattern. No del modo tradicional.

Y el Main Menu, es dinamico, se crea en base a la estructura que se declare en ciertas tablas de la base de datos.
Ademas con perfiles de usuario.

Los forms, ya instrumentan metodos heredados para manipular el mapeo de objetos hacia el Tclientdataset y viceversa.

Tambien utilizo frames, (con mismos metodos para manipular objetos/clientdataset) que sirven para armar master/details.

Un problema que tuve, fue que al declarar properties/fields de las clases, como string, integer, TdateTime, etc, fue que no podia asignar el valor null cuando queria. Asi que tuve que crear mis propios tipos de datos, que son todos variants, pero cada uno con el nombre TString, TEntero, TFecha, TFechaHora, etc.

Otro problema, y sin solucion por el momento, es que no puedo utilizar Blobs.
Pero no es algo dramatico. Cuando necesito manejo de imagenes guardo la ruta de las imagenes.


Como funcionalidad adicional, grabo un log de cada sentencia SQL ejecutada, con el dato de que usuario lo grabó. Lo que me permite replicar la base de datos si lo deseo, o revisar que sucedio, o volver hacia atras alguna operacion quiza.

Bueno, espero que haya aclarado alguna de tus dudas.

Un abrazo

Neftali [Germán.Estévez] 11-07-2006 13:49:14

Cita:

Empezado por lsg
OIDs: utilizo un unico OID por Base de datos, por registro.
Tengo un generador de IDS (una clase dentro del propio framework) que se reserva 15 ids, y una vez reservados nadie puede utilizarlos. Cuando necesita mas, vuelve a buscar otros 15.

Ya me lo supongo (lo de únicos); Me refería al tipo de Datos. en mi caso son enteros largos (64b), pero he visto akgunos modelos que usan alfanuméricas. Tipo GUID.

¿Qué tipo de mapeo de tablas utilizáis? Los 4 que más se utilizan son:En mi caso, en el anterior implemeté el caso 2, y experimenté algunos problemas y en el actual hemos implementado el caso 3 y la mejora ha sido considerable.

Cita:

Empezado por lsg
(1) Tambien utilizo frames, (con mismos metodos para manipular objetos/clientdataset) que sirven para armar master/details.
(2) Un problema que tuve, fue que al declarar properties/fields de las clases, como string, integer, TdateTime, etc, fue que no podia asignar el valor null cuando queria. Asi que tuve que crear mis propios tipos de datos, que son todos variants, pero cada uno con el nombre TString, TEntero, TFecha, TFechaHora, etc.

En ambas cosas coincidimos también, aunque en mi caso son los fields están definidos como TValueFieldBoolean/TValueFieldBooleanDef, TValueFieldInteger/TValueFieldIntegerDef,...

Cita:

Empezado por lsg
Otro problema, y sin solucion por el momento, es que no puedo utilizar Blobs.

Bueno, para ello también tenemos los campos necesarios TValueFieldImage/TValueFieldImageDef y TValueFieldBlob/TValueFieldBlobDef; Como las inserciones se hacen utilizando SQL, para éstos campos se utilizan parámetros en la consulta y no dan problemas.

Cita:

Empezado por lsg
Como funcionalidad adicional, grabo un log de cada sentencia SQL ejecutada, con el dato de que usuario lo grabó. Lo que me permite replicar la base de datos si lo deseo, o revisar que sucedio, o volver hacia atras alguna operacion quiza.

Eso es lo que nosotros llamamos Trazabilidad; Y se puede implementar para las tablas que se necesite de forma dinámica; Se mantienen en el caso de que se active la trazabilidad la tabla paralela con todas las operaciones (I/D/U) que se realizan así como los valores antes y después de del cambio, usuario, fechaHora, máquina,...

lsg 12-07-2006 13:12:09

Con Respecto a los mapeos, en mi caso, suelo utilizar la estructura 1 a veces, otras veces la 2. De acuerdo a lo que vea mas conveniente.

La 3 no la conocia ni la probé.

En que has visto que mejora implementar la estructura 3 ?. Me interesa tu opinion.


La 4 me parece horrible.


Los IDs son integer. Ya que los Longint me traian algunos problemas con los ClientDataset que uso en cada form para mapear de objeto a ClientDataset. No recuerdo cual era el problema en este momento.

Neftali [Germán.Estévez] 12-07-2006 14:08:32

Cita:

Empezado por lsg
La 3 no la conocia ni la probé.
En que has visto que mejora implementar la estructura 3 ?. Me interesa tu opinion.
La 4 me parece horrible.

En realidad es la que se "parece" más a una Herencia de objetos.
Las ventajas frente a las otras es que es mucho más fácil de modificar, las tablas son más pequeñas (ya que cada tabla sólo tiene los campos de esa clase) y eso hace más rápidas algunas operaciones. Pero sobre todo por el tema de modificaciones.

El inconveniente mayor es la generación de consultas, que se hace más compleja.

En ese mismo documento tienes una comparativa simple de las diferentes opciones.


La franja horaria es GMT +2. Ahora son las 13:36:20.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi