Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-06-2007
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
Información de Modelo en 3 Capas. Firebird

Hola,
Buen/as día/tardes/noches.

Disculpen que sea "colgado" pero ¿Desde cuando no está disponible la sección de archivos?

Estuve realizando una búsquedas sobre 3 capas "más" Firebird o Interbase y leyendo varios post noté que en algunos ponían enlaces a la sección archivos (que me doy conque no está disponible) y a artículos viejos, los cuales como me temía estaban rotos o ya pasaron al olvido.

He encontrado dos artículos en el sitio de CodeGear que por el momento parecen ser entendibles, o al menos introductorios.

La búsqueda que estuve realizando en google (por el momento en castellano) me arroja resultados a clubdelphi.

Me preguntaba si alguna persona me podría orientar mejor sobre este tema y/o referenciar algún artículo que podría ser de utilidad.

Desde ya muchas gracias.
Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #2  
Antiguo 26-06-2007
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
Bueno, voy a tener que disculparme...
Soy demasiado bestia...
La sección de archivos si esta disponible. Era mi estupido (si me permiten la expresión) dedo el que ponia Archivo y no Archive

Accedí a dicha sección y estuve haciendo una lectura de lo encontré allí.
Algunos links funcionan, y me llevaron a información digamos que... un poco vieja, y no tan completa.

Si es posible, ¿alguien me podría dar referencias un poco más actuales?.
Encontré diversos significados atribuídos a "3 capas". Mi enfoque es hacia como tratabar en forma adecuada POO, Base de Datos en una arquitectura C/S.

Desde que intenté ofrecer mi ayuda aquí, he estado intranquilo y con dudas de si lo que estoy realizando (y lo que creo haber entendido) estará bien.

Muchas gracias,
Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 30-06-2007
maro maro is offline
Miembro
 
Registrado: sep 2003
Ubicación: Sevilla
Posts: 104
Poder: 21
maro Va por buen camino
Hola,

Creo que el problema es que lo que pides es algo muy general, ya que el tema puede ser muy extenso.

La programación en 3 capas básicamente consiste en separar el motor de datos, del motor SQL y del software cliente. De esta forma dividimos físicamente los procesos: "mantenimiento de datos", "Consulta y manipulación de datos" e "interface para el usuario".
Cada una de estas capas, puede ser instalada en distintas y diversas máquinas, con intención de agilizar cada uno de los procesos y ofrecer un mayor rendimiento a mayor número de usuarios.


Si necesitas orientación sobre algo más concreto sobre el trabajo en 3 capas (que realmente puede y debe ser >= 3 capas ), sobre motores de datos, componentes, metodología, etc, puedes comentarlo y podremos echarte una mano.

Si lo que quieres es saber como empezar, puede buscar información sobre DbExpress + DataSnap para Delphi.

Por otro lado, si lo que quieres es trabajar con base de datos C/S dentro de una red de área local, no te recomiendo trabajar en 3 Capas, aunque esto realmente depende de la arquitectura del Software que desees desarrollar.

Un Saludo.
__________________
Maro. OutSourcing de programación con Delphi.
Responder Con Cita
  #4  
Antiguo 30-06-2007
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
Gracias maro por responder y ofrecer tu ayuda.

Creo que el problema pasa por el significado de "3 capas". Yo entiendo por tres capas a esto:

Capa Interfaz
-------------
Capa Lógica
-------------
Capa Datos

Y vengo llevando desde hace tiempo un enfonque dirigido por POO. Concentré el mayor tiempo de mi análisis al aspecto Lógico. La idea es que conseguir un conjunto de clases que puedan ser reutilizadas. Tengo dos grupos de clases: las de "propódito general" y "propias del negocio" Esto me favorece a que pueda ampliar ambos grupos de clases en forma más o menos independiente.

Con respecto al motor de base de datos que empleo es Firebird versión 1.5.3.

Por el momento lo estoy manejando localmente y estoy pensando en como darle un enfoque C/S. No creo que haya demasiado problemas en esto... aunque reconozco que no se si deberé cambiar y alterar en algún punto el aspecto lógico (mis clases).

Lo que me está costando... entender y comprender es unir las diversas ideas y conceptos que tengo sobre 3 capas, POO y Arquitectura C/S. Como dije antes, intenté ofrecer ayuda aquí y el problema sigue en nieblas.
Buscando, y buscando encontré algo, pero lo que ofrece sobre ser 3 capas me es un concepto ajeno, ya que no coincide mi interpretación de lo que significa 3 capas con lo expresado en dicho documento.

Si alguien tiene un documento y/o un link que trate estos aspectos que complementen a lo que se puede leer en la Cara Oculta se los agradecería. Un enfoque C/S no es primordial, pero si tratar de seguir llevando un enfoque OO y la comunicación sobre base de datos. Esto no sólo me serviría para mi, sino también para FaraonDX y otros interesados.

Espero que se me entienda.
Muchas gracias por tomarse el tiempo en leer este post.
Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 02-07-2007
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
A mi me paso lo siguiente:

Empecé con POO cuando Delphi se llamaba Borland Pascal 6.0 y luego 7.0. y aquella maravillosa cosa llamada Turbo Vision.

QUe maravilla, me movia con soltura en la creación de aplicaciones usando solo OOP, hasta que un día...

Me encontré con el mundo de las bases de datos y las aplicaciones C/S. Lo peor llegó al empezar a estudiar el modelo Entidad-Relación...

E-S y POO simplemente son dos cosas diferentes, si quieres aplicar una deshaces la otra. Ahi fue mi calvario, muchos de mis programas terminaron funcionando bien por fuera pero por dentro llenos de chapuzas y cosas raras. Después descubrí que había cosas como ECO que hacen la traducción de E-S a POO pero eso implicaba ponerse a leer mas y mas y terminar con aplicaciones que con tal de mantener las capas y lo de la POO se llenaban de líneas y líneas de código.

Actualmente opté por un esquema híbrido, un poco de una cosa en donde se pueda y un poco de la otra donde no se puede. La clave: la documentación de l código.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #6  
Antiguo 02-07-2007
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 AzidRain
Actualmente opté por un esquema híbrido, un poco de una cosa en donde se pueda y un poco de la otra donde no se puede. La clave: la documentación de l código.
Disculpa que te moleste AzidRain, ¿Me podrías indicar, si no es demasiada molestia, en forma simple o por lo menos introductoria sobre como realizas este esquema híbrido?

Ten por seguro que llevo un riguroso esquema de documentación de código. Aplico fielmente las buenas prácticas y consejos de la ingeniería de software. Prácticamente he hecho de Ingenía de Software. Un enfoque Práctico de Roger S. Pressman mi biblia.

Desde ya, muchísimas gracias.
Saludos
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 02-07-2007
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Pues bien, aunque no me considero por mucho experto yo lo hago asi para no meterme en honduras:

Practicamente la Capa de datos queda metida en uno o varios datamodules que son los "objetos" que en mi abstraccion saben como manejar los datos que no son mas que tablas.

Ahora bien, todo lo demás lo modelo asi:

1-- Formas "inteligentes"
2.- Formas Auxiliares
3.- Clases varias (todo lo que no sea forma)

Las formas inteligentes saben hacer cosas segun sea el caso, por ejemplo, un catalogo de clientes. La forma es capaz de editar, borrar, etc. uno o varios clientes..para ello utiliza alguno de los datamodules que son los que de verdad hacen el trabajo.

Las formas auxiliares son solo mensajitos o formas adicionales que lo unico que hacen es recoger alguna información (por ejemplo una ventanita de captura).

Las demás clases hacen cosas que no requieren interfaz: respaldos, configuraciones, etc. y pueden formar parte de una forma como propiedad.

De manera que al final lo que obtienes es un conjunto de formas que utilizan otros objetos o clases para manipular datos (la interfaz se da por hecho).

El chiste es separar bien los limites de cada cosa. Una forma, por ejemplo, no debe manipular directamente una tabla, sino hacerlo por medio de alguna otra clase.
Por ejemplo, el catalogo de clientes, puede haber un objeto "TClientes" con sus métodos nuevo, borrar, editar, etc. este objeto clientes es el que internamente accede a datos (aunque aqui adentro ya no utilice mucha OOP, pero el objetivo es encapsular lo mas que se pueda) Este objeto TClientes puede ser una propiedad del Form Catalogo de clientes.

No es muy ortodoxo este esquemita pero a mi me ha funcionado y sobre todo se presta para esos casos en los que no hay mucho tiempo para modelar y hay que programar algo al vuelo.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #8  
Antiguo 02-07-2007
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
Gracias por ayudar AzidRain.

Bueno, a ver... si logro unir las cosas siguiendo tu modelo híbrido. Con lo que yo voy armando.

1. Yo tengo varias clases, que operan y se pasan parámetros. Todo lógica, nada de interfaz... Este conjunto forma la capa lógica.
2. En la capa más baja (Datos) está el/los DataModule/s con el Connection, y posibles algunos que otros Tables, Querys, etc

La comunicación entre las clases y la base de datos debe pasar por el DataModule. Eso creo que está claro, al menos así lo entiendo yo. Y dependiendo de las consideraciones, analáisis, etc... se debe hacer un "canal" más o menos estrecho.

Este canal de comunicación está formado por clases que son las que propiamente tienen encapsulada los eventos y/o procedimientos para permitir las operaciones habituales sobre la base de datos:
*Agregar
*Modificar
*Borrar
*Consultar

Por lo tanto estas clases deberán ser las más bajas de la capa.
Hasta aquí llego teóricamente, ahora... en forma práctica... ¿esto se consigue con algo similar a esto?

Código Delphi [-]
TUnaClaseDeInteres = class
  private
     FModulo: TDataModule; // Un apuntador al DataModule al que debe invadir?
     FConsulta: TQuery; // Un Query para armar consultas?
     // O Tal vez indicar como privado componentes especializados. Como los IBX en mi caso...
  public
     // Propiedades
     constructor Create; override;
     destructor Destroy; override;
     // Funciones y/o procedimientos
     function Agregar(InfoInteres: TInfoInteres): algun_tipo_adecuado; 
     function Agregar: algun_tipo_adecuado; overload;
     // Asi... en forma análoga para Modificar, Borrar y/o Consultar
end;

De modo que, si el análisis lo amerita se pueda hacer algo como:

Código Delphi [-]
TUnaClaseHija = class(TUnaClaseDeInteres);
  private
     FAlgodeInteres: tipo;
     //....
  public
    // Otras cosas interesantes? Algo más directo y especializado para un motor en particular talvez?
end;

Ahora, como le indicaría que debe hacer contacto con el datamodule? Allí me lio... Sería conveniente ver la posibilidad de hacer algo como:
Código Delphi [-]
   UnaClaseDeInteres.AsignarModulo(ElDataModuleAdecuado);

Si voy entendiendo bien... o si tienen críticas, serán escuchadas.
Muchas gracias.
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 02-07-2007 a las 05:40:44.
Responder Con Cita
  #9  
Antiguo 02-07-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
El apuntador al TDatamodule viene así:
Código Delphi [-]
property DataModule : TDatamodule read FDatamodule write SetDAtaModule;
....


procedure TXXX.SetDatamodule(Value:TDatamodule);
begin
  if Value <> FDatamodule then
  begin 
    Value := FDatamodule;
    if Assigned(Value) then
    begin
       // ya podemos usar el datamodule
      //  ojito que se puede hacer :
     //   Datamodule := nil; y habrá que tenerlo en cuenta para no traspasar
    //    un nil
    end;
end;

Yo usaría herencia visual para el datamodule, para al menos tener algunas propiedades ya asígnadas. Será lógico tener el Datamodule principal (donde reside el TDatabase y TTransaction ya configurados) y los nuevos datamodules tendrán un "enlace" a dichos componentes del Datamodule principal.

Para asignar el Datamodule que nos interese, pues como siempre se hace en delphi:
Código Delphi [-]
  UnaClaseDeInteres.Datamodule := dmPepito;


// Adicionalmente se podría desconectar la clase del datamodule así:
  UnaClaseDeInteres.Datamodule := nil; // no sé si será de utilidad... pero ahí está.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #10  
Antiguo 02-07-2007
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 AzidRain
El chiste es separar bien los limites de cada cosa. Una forma, por ejemplo, no debe manipular directamente una tabla, sino hacerlo por medio de alguna otra clase.
Por ejemplo, el catalogo de clientes, puede haber un objeto "TClientes" con sus métodos nuevo, borrar, editar, etc. este objeto clientes es el que internamente accede a datos (aunque aqui adentro ya no utilice mucha OOP, pero el objetivo es encapsular lo mas que se pueda) Este objeto TClientes puede ser una propiedad del Form Catalogo de clientes.
Muy interesante lo que tratan en este hilo. AzidRain, si no es molestia, me gustaría que me aclarases algo: ¿usas o no usas componentes db-aware? Tal como lo planteas, para mantener separados el formulario del acceso a datos, haces la comunicación a través de una clase del tipo TClientes, pero entonces, ¿cómo llenas los controles del formulario que muestran los datos?

// Saludos
Responder Con Cita
  #11  
Antiguo 02-07-2007
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
Creo que ya está "picando" el hilo

Muchas gracias Lepe por aportar ayuda. Ya me va entrelazando y uniendo las cosas en la cabeza.

Cita:
Empezado por Lepe
Yo usaría herencia visual para el datamodule, para al menos tener algunas propiedades ya asígnadas. Será lógico tener el Datamodule principal (donde reside el TDatabase y TTransaction ya configurados) y los nuevos datamodules tendrán un "enlace" a dichos componentes del Datamodule principal.
Ha tener en cuenta. No se que tan complicado sea hacer mediante las herencias visuales; aunque si suena lógico lo que dices.

Cita:
Empezado por Roman
Muy interesante lo que tratan en este hilo.
Muchas gracias. Considero que puede ser de mucha información y utilidad para muchos aventurados en POO + DB.

Cita:
Empezado por Roman
¿usas o no usas componentes db-aware? Tal como lo planteas, para mantener separados el formulario del acceso a datos, haces la comunicación a través de una clase del tipo TClientes, pero entonces, ¿cómo llenas los controles del formulario que muestran los datos?
Ese es uno de los problemas al emplear db-ware... ya que se saltea la capa lógica.
Esa pregunta, a la inversa, es realmente la otra cara de la moneda. Y como lo das a entender debe ser puesta de análisis.

Hay dos canales:
1. Canal Superior: Interfaz/Lógica. Lo que creo que roman hace referencia.
2. Canal Inferior: Lógica/Datos. Este punto es el que se estuvo tratando.

Para la comunicación hacia el exterior yo estaba pensando en algo como:

Código Delphi [-]
TClaseDeSalida = class
   private
      // algo de interés
   public
      // propiedades
     // procedimientos, funciones
     MostrarDatos(info: array of TDatosadecuados {?}; Controles: array of TControl {?}); overload;
    MostrarDatos(Controles: array of TControl); overload;
end;

Mi idea es que haya una clase que reciba los datos y los coloque en los controles pasados por parámetros. No se hasta que punto se podría... habría que ver esta posibilidad.

Voy a hacer un pequeño diagrama de como lo tengo pensado y lo subo a ImageShack y pongo un enlace. Para que se pueda dar una idea.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #12  
Antiguo 04-07-2007
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
Hola a todos,
Antes había dicho que iba a realizar un diagrama y lo subía... pero se me está haciendo dificil sentarme frente a la PC porque paso la mayor parte del día fuera. Estoy trabajando como DBA y esto me quita medio día.

En cuanto tenga nuevas novedades sobre este asunto estaré posteando...
Igualmente si alguien más se anima a continuar con el tema, bienvenido sea.

Saludos a todos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #13  
Antiguo 04-07-2007
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Contestando la pregunta de Roman..
Si, uso componentes dbaware. Como lo modelo (un poco por las prisas) las ventanas con acceso a algun dato o datos contienen componentes dataware, los cuales se llenan a partir de algun query por ahi. Normalmente cuido que los querys devuelven solo lo necesario.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #14  
Antiguo 04-07-2007
faraonDX faraonDX is offline
Miembro
 
Registrado: jun 2007
Posts: 24
Poder: 0
faraonDX Va por buen camino
Un saludo tengan todos.

Como te comente al amigo delphius este es exactamente lo que estaba buscando, porque es un tema que tiene tela por donde cortar, anteriormente el análisis yo lo realizaba de una forma estructurada pues determinaba las principales áreas funcionales de sistema a desarrollar e iba subdividiendo el sistema hasta que tuviera cierta estabilidad y poca complejidad, nada de diseño de clases sino procedimientos y funciones que pertenecían a un área funcional, lo cierto es que normalmente lo anterior parece sencillo, la realidad es que en aplicaciones de dimensiones mayores, se forma cierta complejidad que a veces no podemos dominar en toda su dimensión (Análisis –diseño - implementación), desde que me inicie en la programación oí hablar de poo pero no lo entendía del todo , sin saber que esto me podía resolver el problema.

Ahora estoy empeñado en realizar los análisis de mis aplicaciones de una forma OO, perfecto, pero a la hora de llevarlo a implementación es donde surgen los problemas de los que se están comentando en este debate, principalmente en sistemas de bases de datos (SBD).

Si tengo un diseño OO determinado, la implementación debe describirlo, pienso yo.

Como comentaba el amigo delphius en un de sus post:

[quote= delphius]
Creo que el problema pasa por el significado de "3 capas". Yo entiendo por tres capas a esto:

Capa Interfaz
-------------
Capa Lógica
-------------
Capa Datos

[quote]

La interconexión que existe entre estas capas es el dilema a mi entender, el colegaAzidRain explica como modela su sistema y en verdad me aclara muchas dudas, principalmente en la relación entre la capa lógica y la de datos, pero la verdad que no logro entender como interconecto los controles db- aware (capa InterfazU) con la capa lógica, teniendo en cuenta que por defecto existe una relación Table – datasource – dbware.

Auque delphius expone una posible interconexión, la verdad que tendría que probar a ver si funciona.

Yo propongo un ejemplo práctico completo y sencillo en que se pudiese plasmar todas estas teorías, digo si no estoy pidiendo mucho.

Algo así como el artículo: http://www.rinconcitodelphi.com/arti...PenDelphi1.pdf
Que por cierto me parece un poco insustancial. A ver como se resuelve esto con el modelo hibrido de AzidRain.
Responder Con Cita
  #15  
Antiguo 05-07-2007
faraonDX faraonDX is offline
Miembro
 
Registrado: jun 2007
Posts: 24
Poder: 0
faraonDX Va por buen camino
disculpa

Pido diculpa por el post anterior, parece que tuvo un accidente de transito, la verdad es que tengo una conexión un poco lenta, y el apuro por codificar tare con sigo ese tipo de accidente.
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
Información sobre FireBird mosorio Firebird e Interbase 2 25-03-2024 19:49:58
Cambio de modelo de 3 a 2 capas Toni Providers 6 23-05-2005 23:17:42
modelo de 3 capas - delpji s_dominguez Providers 2 21-05-2005 18:14:49
Cantidad de Informacion en Firebird Choclito Firebird e Interbase 9 27-10-2004 20:37:27
informacion para construir una aplicacion de tres capas muli Providers 2 23-02-2004 01:22:04


La franja horaria es GMT +2. Ahora son las 21:56:37.


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