Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-02-2012
gustavosv gustavosv is offline
Miembro
 
Registrado: mar 2008
Posts: 51
Poder: 17
gustavosv Va por buen camino
Abstraccion en BD

Hola amigos, tengo la siguiente inquietud y busco alguna orientación para encontrar el mejor camino, pretendo generar una capa de abstracción entre mis clases de tablas de la BD y las instrucciones de actualización de las tablas, me explico, por un lado tengo mi clase TProducto, TCliente que contienen los campos de la respectiva tabla, y pretendo tener en otra clase TCRUDs con las funciones/procedimientos para realizar las actualizaciones CRUD (create, update, delete) de cualquier tabla, p.ej.
Código Delphi [-]
TProducto = class(TConexionClass)
protected
  FpdtId: string;
  FpdtDescripcion: string;
.
..
...
function TProducto.Nuevo: Boolean;
begin
  TCRUDs.Insertar(Self);
end;

y en la clase TCRUDs 

function TCRUDs.Insertar(ObjetoBD: TObject): Boolean;
var
  Query: TADOCommand;
begin
  //  Cómo leo las propiedades del objeto ObjetoBD y sus valores ...?
 
  Query.CommandText := 'INSERT INTO Tabla (..propiedades del ObjetoBD..) VALUES (..valores de las propiedades del ObjetoBD..)
  Query.Execute; 
end;

La pregunta es, cómo puedo implementar p.ej. el método Insertar de TCRUDs de manera tal que lea las propiedades del objeto que se envió como parámetro (ObjetoBD) y sus valores ...?

De antemano, gracias !
Responder Con Cita
  #2  
Antiguo 21-02-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Lee e investiga sobre persistencia. Existen en el mercado variados frameworks de persistencia. Algunos más complejos que otros, algunos caros... otros baratos, e incluso hasta Open Source.

Si tienes las posibilidad de acceder al libro UML y Patrones de Caig Larman, en los últimos capítulos le dedica un espacio a presentar justo esto. Básicamente, existe un conversor o wraper que asume justamente la tarea de "traducir" un objeto del dominio (que será persistente) a un registro de una tabla. Y a su vez, también lee de la tabla y regresa el objeto del dominio.

Por tanto, por cada objeto del dominio persistente (aquel que posee una representación en la base de datos, y por tanto se almacenará) se diseña una clase conversor apropiada (existe una clase conversor abstracta, obviamente, de la cual se hereda). Luego existe una fachada de persistencia que se encarga de crear y administrar los conversores; vendría a ser, salvando algunas diferencias, la clase TCRUD que defines.
Por lo general, algunos frameworks se apoyan en el uso del patrón proxy para hacer la asociación TClaseDominio <-> TConversorClaseDominio.

Esto es en líneas generales. Recomiendo la lectura de dicho libro te puede ayudar a aclarar ideas.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 22-02-2012
gustavosv gustavosv is offline
Miembro
 
Registrado: mar 2008
Posts: 51
Poder: 17
gustavosv Va por buen camino
Amigo Delphius, gracias por tu respuesta, ya encontré el libro, se bien interesante, voy a leerlo y si encuentro el camino lo estaré comentando en el foro. Gracias !
Responder Con Cita
  #4  
Antiguo 22-02-2012
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.318
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Busca artículos referentes a Frameworks de Persistencia de Joanna Carter; Hay algunos bastante buenos. Además de los comentados por Delphius.

También tiene varios sobre las diferentes posibilidades para "mapear" los objetos sobre tablas de la Base de Datos.

Es un tema del que ya hemos hablado otras veces en los foros, así que buscando he llegado a este mensaje. Revisa esa documentación.

Aquí tienes los diferentes mapeos a los que hacía referencia antes. Revisa ese hilo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 22-02-2012
gustavosv gustavosv is offline
Miembro
 
Registrado: mar 2008
Posts: 51
Poder: 17
gustavosv Va por buen camino
Hola Neftalí, ya revisé algunos y son bastante interesantes. Gracias por las referencias !
Responder Con Cita
  #6  
Antiguo 22-02-2012
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.917
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Un ORM comercial que ha tenido buenos comentarios:

http://www.tmssoftware.com/site/aurelius.asp

Una forma diferente de ver el problema lo hacen en DataAbstract:

http://www.remobjects.com/da/
__________________
El malabarista.
Responder Con Cita
  #7  
Antiguo 22-02-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por Neftali Ver Mensaje
Busca artículos referentes a Frameworks de Persistencia de Joanna Carter; Hay algunos bastante buenos. Además de los comentados por Delphius.

También tiene varios sobre las diferentes posibilidades para "mapear" los objetos sobre tablas de la Base de Datos.

Es un tema del que ya hemos hablado otras veces en los foros, así que buscando he llegado a este mensaje. Revisa esa documentación.

Aquí tienes los diferentes mapeos a los que hacía referencia antes. Revisa ese hilo.
Hola Neftali,
Reuerdo de otro hilo que habías recomendado antes el material de Scott Ambler y en su momento le he dado una leída (aunque admito que superficial).
Viendo el post que enlazas, tal parece que en los foros de la ex Borland se trató el tema también y estoy intrigado por consultar dicho material.
Naturalmente esos enlaces están muertos, estuve buscando por los foros de Embarcadero a ver si en una de esas se tiene copia de eso y/o si se habló del tema pero mis resultados han sido negativos. Utilizando el propio buscador de edn.embarcadero con términos como persistence u OPF me arroja algunos posts de resultados pero ni bien intento acceder a los mismos me dicen que no se ha encontrado el mensaje, ni el hilo. Probando con resultados de fechas actuales como viejas... todo conduce a un not found

¿Por casualidad tu no tienes o conoces un enlace directo, si es que existe?

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #8  
Antiguo 22-02-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Los grupos de noticias de Borland puedes consultarlos en Google Groups. Ese tipo de temas en específico, solían tratarse en el grupo de oodesign.

Eso sí, el acceso es algo lento y a veces no carga la página.

// Saludos
Responder Con Cita
  #9  
Antiguo 22-02-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
Los grupos de noticias de Borland puedes consultarlos en Google Groups. Ese tipo de temas en específico, solían tratarse en el grupo de oodesign.

Eso sí, el acceso es algo lento y a veces no carga la página.

// Saludos
¡Gracias! Me voy a poner a buscar allí si encuentro algo.

Me parece raro que si bien la búsqueda en edn me lleva a posts, éstos no estén... ¿O es hay problemas con el foro de edn? Creería que si porque de por sí ya es muy lento acceder a cualquier página.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #10  
Antiguo 23-02-2012
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.917
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Es importante anotar que con las caracteristicas nuevas de delphi xe+, como mejor RTTI, funciones anonimas y otras cosas se volvio mas simple hacer un ORM.

El problema de los ORM es que son muy complejos de hacer en lenguajes estaticos, y mas si el RTTI es pobre.
__________________
El malabarista.
Responder Con Cita
  #11  
Antiguo 23-02-2012
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.318
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Delphius Ver Mensaje
¿Por casualidad tu no tienes o conoces un enlace directo, si es que existe?
Déjame que revise documentación a ver si tengo algo...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #12  
Antiguo 25-02-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por Neftali Ver Mensaje
Déjame que revise documentación a ver si tengo algo...
No hay apuro, ni obligación amigo. Es sólo una inquietud mía.

Todavía tengo que ponerme a revisar lo que comentó Roman. En principio es para ir recopilando más material de consulta para luego poder llevarlo a la práctica, mejorar y ampliar como se debe el mini básico framework de persistencia que me diseñé.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #13  
Antiguo 27-02-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No sé exactamente a qué te referías cuando solicitabas un enlace directo. Pero, si de algo sirve, en el sitio de Scott Ambler hay enlaces a multitud de artículos de él. En particular, me parece que uno de los clásicos es el de Mapping Objects to Relational Databases.

// Saludos
Responder Con Cita
  #14  
Antiguo 27-02-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
No sé exactamente a qué te referías cuando solicitabas un enlace directo. Pero, si de algo sirve, en el sitio de Scott Ambler hay enlaces a multitud de artículos de él. En particular, me parece que uno de los clásicos es el de Mapping Objects to Relational Databases.
// Saludos
Al sitio y artículos de Scott Amber ya los venía leyendo amigo; quizá si es que me falta darle su mayor atención y pulida. Por enlace directo me refería a alguna discusión, post o artículo en particular y que quizá merezca su atención dentro del sitio de Embarcadero, o de la ex Borland en Google Groups.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #15  
Antiguo 27-02-2012
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.917
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Yo participe mucho en esas discusiones y por ello te cuento que muchos de los problemas en este tema estan dados por las limitaciones de los lenguajes estaticos (que eran mucho mayores en delphi antes de la ultimas adiciones).

Hacer que un objeto mapee una tabla es en si sencillo. Puede automatizarse con un generador de codigo. Por ejemplo, en esa epoca leia las estructuras de la BD y generaba las clases.

Sin embargo, rapidamente la cosa se va a complicar debido al Object-relational impedance mismatch y al hecho que en la capa de negocios se trabaja mas sobre flujos de datos que simplemente operaciones CRUD.

Con todo, la mejor manera es que trates de hacer un micro-orm. Es muy facil. Se puede tener listo algo en menos de 1 semana, en un par de meses tenes algo mediobueno (ej: En Obj-c tengo este publicado: http://code.google.com/p/chibiorm/).

Pero aun mejor es que uses uno hecho. El de TMS parece bueno.

Tambien ayuda mucho que veas como implementan otros este tema:

Por ejemplo, remobjects tiene el concepto de "no tratemos de hacer un ORM, eso no es buena idea, pero si es buena idea hacer codigo que parece ORM":

http://wiki.remobjects.com/wiki/Stro...lasses_(Delphi)

En .NET, use este:

http://subsonicproject.com/

Y en python, me ENCANTA el ORM de django:

https://docs.djangoproject.com/en/dev/topics/db/

----

Los ORM son en muchos casos usados por quienes no saben nada o poco sobre bases de datos. Y quienes lo saben, prefieren llamadas directas a la BD porque son mas eficientes (los ORM tienden a generar SQL muy ineficientes y redundantes).

Yo tengo una mentalidad intermedia. Me gusta mucho un ORM. Y me gusta poder llamar directamente a la BD (asi hice a chibi). He notado que sqlite & postgres son IDEALES para unir a un ORM:

- sqlite/postgres porque no tiene limites en los tamaños de los campos texto (ej: se puede declarar NAME TEXT y punto)
- postgres porque puedes definir tipos de datos complejos que pueden encajar bien con los ORM

Aun mas ideal es no usar una BD relacional, usar lo que se llama un NOSQL como mongo: http://www.mongodb.org/ Eso elimina el "Object-relational impedance mismatch" y los objetos mapean directamente, pero pierdes el modelo relacional y otras cosas.
__________________
El malabarista.

Última edición por mamcx fecha: 27-02-2012 a las 21:24:53.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Alguna capa de abstraccion de datos? jlcasih Conexión con bases de datos 1 10-04-2006 20:39:15
Abstracción de aplicación por departamentos adlfv OOP 2 26-10-2005 07:46:38


La franja horaria es GMT +2. Ahora son las 03:57:15.


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
Copyright 1996-2007 Club Delphi