Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-09-2006
jorllazo jorllazo is offline
Miembro
 
Registrado: sep 2006
Ubicación: Valencia, España
Posts: 83
Poder: 18
jorllazo Va por buen camino
Crear Clases propias o Usar Existentes

Hola.
Os importaria darme vuestra opinion, sobre este tema?. A la hira de crear una aplicacion de Gestion, vosotros como programadores experimentados, usarias las clases de conexion con BD exitentes para el 100% de la aplicacion ? o por el contrario usariais vuestras propias clases que a su vez usen las de Acceso a BD?.

Elp roblema seria que no podrias usar los componentes de acceso BD no ?
__________________
Gracias de Antemano
Responder Con Cita
  #2  
Antiguo 08-09-2006
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.275
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
¿Puedes explicarte un poco mejor? No acabo de entender.
No se pueden usar componentes de Base de Datos.
¿A qué clases te refieres?
__________________
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
  #3  
Antiguo 08-09-2006
jorllazo jorllazo is offline
Miembro
 
Registrado: sep 2006
Ubicación: Valencia, España
Posts: 83
Poder: 18
jorllazo Va por buen camino
Me refiero pues por ejempplo que uses los componentes de ADO, TAdoTable, TAdoConnection y luego usar el componente TDBEdit por ejemplo para recuperar el nombre de un articulo de la BD? y usar estos componentes TDBEdit, TDBCombo, etc,....

Pôr otro lado a lo que me refiero es crear una clase que sea por ejemplo

Código Delphi [-]
 
           type 
                  TArticulo = class
                  private
                      sReferencia : string;
                      sDescripcion : string
                      iCantidad : Short;
                  public
                      property Referencia: string read Referencia write Referencia
                      property Descripcion: string read Descripcion write Dascripcion
                      property Cantidad: short read Cantidad write Cantidad
                      procedure loadFromDB;
           end
 
luego:
 
             procedure TArticulo.LoadFromDB
             begin
                   //codigo de acceso a datos para extraer este Articulo
                   //Rellenar las propiedades del artículo
                   //tarticulos es un TADoTable

                   sDescripcion := trim(tArticulos.fields['Descr'].Value);
                   iCantidad := tArticulos.fields['Cantidad'].Value;
                   .....
                   
             end

Ahora habiora que crear un Objeto de la clase, largarllo de la BD con su metodo y usarlo en el codigo. Pero entonces ya no podrias usar el TDBEdit por ejemplo. Tendrias que usar el TEDit y hacer la asociacion de controles y propiedades del objeto a mano. ¿Me he explicado mejor?, si no lo intento de nuevo
__________________
Gracias de Antemano
Responder Con Cita
  #4  
Antiguo 08-09-2006
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.275
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
Ok, ahora entendí un poco mejor (o creo).

Hablamos de usar componentes estandard DataAware (TDBEdit) o utilizar una capa de persistencia on componentes no-DataAware (TEdit).

Cita:
Empezado por jorllazo
Me refiero pues por ejempplo que uses los componentes de ADO, TAdoTable, TAdoConnection y luego usar el componente TDBEdit por ejemplo para recuperar el nombre de un articulo de la BD? y usar estos componentes TDBEdit, TDBCombo, etc,....
Pôr otro lado a lo que me refiero es crear una clase que sea por ejemplo
Esa es una cuestión bastante importante a decidir y que te va a cambiar por completo la aplicación. Difícil aconsejarte lo uno o lo otro. Deberías leer sobre Persistence FrameWorks (no se por donde empezar); Lee sobre ECO, documentación de Scott Ambler,...

Cita:
Empezado por jorllazo
...Pero entonces ya no podrias usar el TDBEdit por ejemplo. Tendrias que usar el TEDit y hacer la asociacion de controles y propiedades del objeto a mano. ¿Me he explicado mejor?, si no lo intento de nuevo
No es imcompatible lo uno con lo otro. Los Capas de persistencia también pueden trabajar con los componentes de Base de Datos. Piensa que un componente muestra lo que hay en un DataSet y el DataSet es el que realmente interactual con la BD (graba en disco, recupera,...); Por tanto se puede hacer (yo lo he hecho ) que el componente estandard llegue hasta el DataSet y el DataSet (o derivado) en lugar de grabar de la forma estandard, utilice la Persistencia (tus clases) y SQL para interactuar con la Base de Datos.

Creo recordar que los InstantObject funcionaban de forma similar; No se como lo hace ECO, porque no he trabajado con él...

Espero que te sirva la información y no haerte liado más de la cuenta.
Si tienes más dudas, no "dudes" en preguntar.

Un saludo.
__________________
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 08-09-2006
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
Cita:
Empezado por Neftali
Piensa que un componente muestra lo que hay en un DataSet y el DataSet es el que realmente interactual con la BD (graba en disco, recupera,...);
Pero yo creo que esto depende mucho de cómo se diseñen esas componentes. Tú, mejor que yo, sabes muy bien que una clase en el modelo, no necesariamente tiene correspondencia directa con una tabla de la bd, que es lo que parecería entenderse con el comentario citado.

Cita:
Empezado por Neftali
[...]se puede hacer (yo lo he hecho ) que el componente estandard llegue hasta el DataSet y el DataSet (o derivado) en lugar de grabar de la forma estandard, utilice la Persistencia (tus clases) y SQL para interactuar con la Base de Datos.
¡Ah! Pero ¿qué significa o cómo haces que un DataSet grabe en forma no estandar?

Siento que en realidad no estoy entendiendo lo que quieres decir con los párrafos anteriores. ¿Podrías explicar un poco más?

Similar a esto, he visto lo que menciona Wayne Niddery aquí pero no sé si es a eso a lo que te refieres.

// Saludos
Responder Con Cita
  #6  
Antiguo 08-09-2006
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.275
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 roman
Pero yo creo que esto depende mucho de cómo se diseñen esas componentes. Tú, mejor que yo, sabes muy bien que una clase en el modelo, no necesariamente tiene correspondencia directa con una tabla de la bd, que es lo que parecería entenderse con el comentario citado.
Correcto, una clase puede tener una tabla asociado, ninguna o varias (segun el modelo de mapeo que se use en Base de Datos).
A eso me refería a "rediseñar/derivar" el TDataSet(o derivado) para poder hacer lo que necesitemos; Acceder al modelo de persistencia, ejecutar las reglas de negocio,... y finalmente insertar utilizando SQL (en mi caso).

Cita:
Empezado por roman
¡Ah! Pero ¿qué significa o cómo haces que un DataSet grabe en forma no estandar?¿Podrías explicar un poco más?
Me refería a realizar las inserciones/modificacionea/borrados utilizando sentencias SQL; Ese es mi caso; Tal vez no me expliqué bien...

NOTA: Ahora me leo en artículo...
__________________
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
  #7  
Antiguo 08-09-2006
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.275
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 roman
Similar a esto, he visto lo que menciona Wayne Niddery aquí pero no sé si es a eso a lo que te refieres.
Lo que comenta este párrafo es básicamente lo que intentaba explicar yo:

Moving data between controls and a data source in no way compromises an OO design because data sources (i.e. TDatasource) do not directly connect to a database and have absolutely no knowledge of the ultimate source or destination of the data that passes through them. Their only role is to provide a single point of connection for any number of individual data-aware controls. That single point of connection is to any descendant of the TDataset class.

Los controles de Base de Datos (TDBEdit, TDBCombo,...) no son el problema; La "miga" y la potencia está realmente en el TDataSet (DataLink); Además, derivado adecuadamente es el que te puede proveer de un FrameWork independiente del SGBD.

Y esto creo que da la respuesta:
Summary

Existing data-aware controls are perfectly compatible with well-designed object-oriented systems. The scorn placed on them by many has been misplaced; the real problem is the routing of data; data-aware controls hooked to datasets that have actual database connections is the problem since this allows data to flow around business logic instead of through it. But it is a problem solved easily by making your business classes responsible for creating the datasets seen by the presentation layer.

Se trata de que los componentes traten con un TDataSet y cortar el flujo de información entre el TDataSet y la Base de Datos, pasándolo al Gestor de Persistencia; Es el Gestor de Persistencia el que se comunica con el SGBD (en nuestro caso en lugar de vía TClientDataSet, como comenta el artículo, utilizando SQL).

A esto me refería con "no grabar de la forma estandard"; En el artículo habla de utilizar un ClientDataset, yo pensaba en SQL directamente.
__________________
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
  #8  
Antiguo 08-09-2006
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.275
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
Ya que ha salido el artículo, recomiento revisar en la misma Web (dentro de los Artículos) el que se llama:
Delphi Tools that will Help you

No pongo en link directo, porque no funiona, hay que entrar en la página principal, ir a Artículos y seleccionar este.
__________________
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
  #9  
Antiguo 08-09-2006
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
Cita:
Empezado por Neftali
(en nuestro caso en lugar de vía TClientDataSet, como comenta el artículo, utilizando SQL).

A esto me refería con "no grabar de la forma estandard"; En el artículo habla de utilizar un ClientDataset, yo pensaba en SQL directamente.
Disculpa mi espesez, pero sigo sin entender. Según entiendo, la idea de Wayne se resume en esto:

La clase TArticulo (por fijar ideas) expone un ClientDataSet al cual se conectan los controles dbaware. Cuando uno llama a, digamos, Articulo.Save, la clase toma los datos del ClientDataSet y los manda a la base de datos. Esto último puede hacerlo- y en la mayor parte de los casos seguramente así lo hará -construyendo una consulta SQL adecuada y pasándosela a la componente que sea menester. Alrevés supongo algo similar. Cuando se llama a Articulo.Load, la clase lanza una consulta SQL y con los datos obtenidos llena un registro del ClientDataSet.

De esta manera entiendo cómo el tráfico entre el control dbaware y el destino final se intercepta y se puede controlar.

Pero con lo que tú dices no entiendo. ¿Como sin usar este ClientDataSet o algo similar controlas este tráfico? Es decir, un DataSet que no sea de memoria, estará comunicado directamente con la bd física, ¿no?

Quizá es que en el derivado interceptes cosas como el Post, por ejemplo. No sé.

// Saludos
Responder Con Cita
  #10  
Antiguo 08-09-2006
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.275
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 roman
Quizá es que en el derivado interceptes cosas como el Post, por ejemplo. No sé.
La idea es esa exactamente. Se interceptan los métodos de grabar en Base de Datos y se sustituyen por otros que redirigen esas operaciones al Gestor de Persistencia.

Y de una forma similar se hace en la lectura.

Para hacer ese trabajo, almacenar los datos y "ofrecerlos" a los controles da igual utilizar el TClientDataset o el TDataSet; Igualmente el acceso a la Base de Datos se va a realizar desde otro sitio, en ningun caso lo van a realizar ninguno de estos dos controles.
__________________
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.

Última edición por Neftali [Germán.Estévez] fecha: 08-09-2006 a las 17:28:10.
Responder Con Cita
  #11  
Antiguo 08-09-2006
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
Sigo sin entender gran cosa. No veo cómo es que da lo mismo el ClientDataSet que un DataSet cualquiera. Pero gracias de todas formas.

// Saludos
Responder Con Cita
  #12  
Antiguo 09-09-2006
jorllazo jorllazo is offline
Miembro
 
Registrado: sep 2006
Ubicación: Valencia, España
Posts: 83
Poder: 18
jorllazo Va por buen camino
Bufff, creo que el que no entendio ya gran cosa, fui yo.
voy a tomarme mi tiempo para leer bien estos mensajes
(no pude antes por que se me han roto 2 PC seguidos oremos por este que queda)

De todos modos, tampoco tengo muy claro como se tendria que hacer esta capa q ofreciera la interfaz de un objeto y que tratase con el acceso a datos. Igual este debio ser mi planteamiento inicialmente, se podria postear algun tipo de ejemplo o link a ejemplos, soy de los que si no lo veen no lo creen.
__________________
Gracias de Antemano

Última edición por jorllazo fecha: 09-09-2006 a las 13:38:00.
Responder Con Cita
  #13  
Antiguo 11-09-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Creo que el tiro va por lo de InstantObjects o de Enterprise Core Objects (ECO), incluido este último en el BDS 2006 (.net).

¿Me equivoco?
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #14  
Antiguo 23-04-2007
edalmasso edalmasso is offline
Miembro
 
Registrado: nov 2005
Ubicación: Mendoza - Argentina
Posts: 37
Poder: 0
edalmasso Va por buen camino
Smile

Información y ejemplos completos de ECO:
http://www.clubdelphi.com/foros/showthread.php?t=42787

Responder Con Cita
  #15  
Antiguo 26-04-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cool Sin ver mas alla...

Me parece que si hablas de un programa de gestion, estamos hablando de un sistema con varias formularios, funciones, manejo de archivos, etc, etc... Lo que en definitiva te aconsejo usar es una clase existente para concentrarte mas en lo tuyo, si te pagaran bien (por ejemplo). yo siempre acostumbro crear mi propio formato y motor de base de datos, asi consigo lo que exactamente necesito y de una forma que pocos podrian hackear.
Responder Con Cita
  #16  
Antiguo 26-04-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
yo siempre acostumbro crear mi propio formato y motor de base de datos, asi consigo lo que exactamente necesito y de una forma que pocos podrian hackear.
¿A qué te refieres con "formato" y con "motor de base de datos"? ¿Podrías explicar un poco más? Gracias.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #17  
Antiguo 26-04-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cool Explicacion

bueno, formato... defino mi "cabacera" (hash, propietario, privilegios, version, etc), defino mis campos de tablas, mis tablas etc, etc... digamos que trabajo con un "archivo plano"... lo que todos hacen... Una vez hice uno que trabajaba con posiciones absolutas de disco duro bajo el S.O. pero no lo llegue a implementar. consigo BDs de pocos Kb y veloces... dedicados a ser parte de aplicaciones mas que a medida.

En motores, los sub-sistemas que me permiten acceder via SQL (basico), funciones de comprobacion, bloqueo, privilegios, Sockets para trabajar en red, pseudo - triggers, y eso..
Responder Con Cita
  #18  
Antiguo 26-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Yo tengo una pregunta también.

Si yo empecé con paradox, creando mis clases y mis rutinas de apoyo; después he pasado a Firebird y he hecho lo mismo; ahora me decís que la persistencia es la monda ... si estoy cambiando de esquema de programación cada dos por tres, ¿Cuando voy a reutilizar las clases y rutinas de apoyo que tengo hechas?

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #19  
Antiguo 26-04-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Desengáñate Lepe, nunca podrás reutilizar ninguna clase.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #20  
Antiguo 27-04-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cool Tampoco.

No dije cual es la moda... digo lo que yo en persona prefiero hacer siempre que la relacion costo/beneficio y tiempo me lo permite. Ahora con el asunto de reutilizacion de tus clases (lepe), pues en definitiva es un problema... habría que evaluar cuanto vale la pena realizar dicha "migracion" , es muy probable que te cueste arto reutilizar tus definiciones antigüas, yo en ese caso crearia una interfaz compatible, un motor que reconozca dichas clases.

Suerte!
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
Lista con los informes existentes en una BD en Access zerelho Servers 2 02-06-2006 01:14:32
crear clases en delphi alextmb Varios 6 24-04-2006 01:40:45
Conocer ip de las conexiones existentes anduj Firebird e Interbase 8 01-03-2005 15:50:14
Definir Mis Propias Clases jberaza OOP 1 27-09-2004 17:11:08
Crear librerias propias en delphi Jan_polero OOP 5 15-05-2004 13:29:04


La franja horaria es GMT +2. Ahora son las 05:33:55.


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