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 13-06-2007
faraonDX faraonDX is offline
Miembro
 
Registrado: jun 2007
Posts: 24
Poder: 0
faraonDX Va por buen camino
Arquitectura en código de un sistema de BD

La verdad es que se comenta mucho de como hacer esto lo otro, pero no he podido tener la oportunidad, de consultar con otras personas: cuál es el procedimiento a seguir desde el punto de vista arquitectonico para diseñar sistemas de base de datos, es decir cuantas unit debe tener la aplicación según el análisis y diseño realizado anteriormente y en cual introdusco esta clase o la otra, aunque tengo mi propio estilo para el diseño, pienso que debe existir una manera estandar de hacer las cosas principalmente para los sistemas de Base de Datos que claro en delphi manipula muy bien sobre todo con los controles Dataware, mi pregunta es la siguiente ¿Puedo utilizar estos controles en un sistema diseñando OO? si lo puedo utilizar ¿Como es que lo utilizo en las clases si existe una relación de modelo de tres capas ?

Espero que entiendan mis ideas y que me ayuden a aclarar el tema.
Responder Con Cita
  #2  
Antiguo 14-06-2007
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
A ver: Object Pascal tiene soporte OO nativo, ¿no? Entonces, ¿por qué dudas de que pueda hacerse?
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 14-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
Hola FaraonDX, bienvenido a clubdelphi.

No se si estoy entendiendo bien tu pregunta. Tu dirás si me equivoco.

Cita:
Empezado por FaraonDX
cuál es el procedimiento a seguir desde el punto de vista arquitectonico para diseñar sistemas de base de datos, es decir cuantas unit debe tener la aplicación según el análisis y diseño realizado anteriormente y en cual introdusco esta clase o la otra
La cantidad de unit que deberá tener una aplicación es como tu dices: dependerá del análisis y diseño que se haya realizado anteriormente. No es tan sencillo poder encontrar la cantidad de unidades (módulos) exacta para llevar a cabo tu aplicativo.
POr más empleo de métricas, y buenas prácticas que uses para determinar tanto el acomplamiento y cohesión que hay presente entre los módulos (y en el módulo). Hay un factor subjetivo que afecta (en mi experiencia) en forma proporcional a la complejidad del sistema.

Una primera aproximación para determinar la cantidad de unidades puede ser esta:
Cita:
La cantidad de módulos o unidades responde a la cantidad de entidades y/o a la cantidad de tablas de su base de datos.
Es decir que si en tu base de datos hay 10 tablas, tu sistema puede llegar a tener alrrededor de entre 7 y 13 unidades. (Consideré un factor de error del 30%) Suponiendo que estamos en la etapa de estimación, considerar este porcentaje de error (30%) es válido. Pero si estamos en la etapa de construción este factor debería ser por lo menos la mitad, ya que se supone que la mayoría de sus requisitos y análisis ya fueron validados y validados. El factor debería ir decreciendo a medida que se avanza.

Cita:
Empezado por FaraonDX
aunque tengo mi propio estilo para el diseño, pienso que debe existir una manera estandar de hacer las cosas principalmente para los sistemas de Base de Datos
El estandar de diseño por excelencia para POO es UML. Y sería recomendable su uso. Recuerda que el estándar está para ser usado y permite hablar del mismo tema sin temor a interpretar erroneamente lo que otro ha diseñado. Es un lenguaje común que favorece la comunicación y entendimiento. ¿Es bueno saber que si tu te pierdes, otro te puede hablar en tu mismo idioma, no crees?

Cita:
Empezado por FaraonDX
¿Puedo utilizar estos controles en un sistema diseñando OO? si lo puedo utilizar ¿Como es que lo utilizo en las clases si existe una relación de modelo de tres capas ?
¿Que te impide emplear los controles dataware? Por algo están...

No se como debería interpretar la parte de modelo de tres capas. He visto muchas definiciones de lo esto significa. En lo personal, tres capas significa para mi esto:

-------------
Capa Interfaz -> Entrada y Salida de datos.
-------------
Capa Lógica -> Clases, y/o funciones o procedimientos que operan sobre los datos ingresados y/o recuperados de la base datos (para luego mostrarlos)
-------------
Capa Datos -> Módulo de datos (DataModule), Base de datos.
-------------

Si es que lo que entiendo por tres capas es correcto, y viendo lo que comentas sobre dataware, estos están en la capa de Interfaz, ya que se adosan a esta última. Ten en cuenta que estos componentes responderán a las fuentes de Datos (DataSource, etc).

Ahora, veo que parece que estás siguiendo un enfoque OO (Sería lógico. ya que es un punto fuerte que ofrece Delphi).

Por un lado tienes las units que responden a tu interfaz y por el otro las que tienen definida toda tu estructura (diagrama de clases) con sus jerarquías, relaciones, etc... Y por el otro las más bajas: la de datos.

La pregunta a la respuesta ¿Cuantas unit son necesarias? Debe responder a estos 3 tipos de units.
Como dije antes:
Cita:
Empezado por Yo
a la cantidad de entidades
Una clase es una entidad. Eso lo sabemos, y dicha clase puede (no necesariamente) ser una representación de alguna tabla. Por lo tanto deberías contemplar este caso: estarías contando doble (la de lógica y de datos)

La cantidad de units responderá en sintesis a una compensación y equilibrio entre tus tres capas.

Me encantaría seguir comentando sobre lo referente a la capa lógica. Pero esto sería oportuno dedicarlo y tratarlo en un hilo aparte.
Como recomendación, deberás tener en cuenta que la cantidad de unidades lógicas a contar responderá también a esta pregunta:

Cita:
¿Consideramos todas las unidades que respondan al arbol de jerarquía? ¿O por el contrario, sólo las que responden en la especialización para responder al problema en cuestión?
Esta última pregunta es vital saber responder. ¿Cuántas contar?
Veamos con un ejemplo: tienes 15 clases, por comodidad cada una declarada en una unidad diferente. De estas 15, 5 son desdendientes. Estas 15 clases fueron definidas en un momento anterior y son para propósito general.

Te da un sistema para hacer y notas que puedes reutilizar la clase inferior que mantienen una relación de herencia (las 5). La pregunta es: ¿Incluirías a la cuenta, las 5 de propósito general , las 15 en su totalidad, o sólo la que empleas para heredar y trabajar?

Lo que trato de decirte es que deberás saber donde termina y comienza tu sistema. Seguir un modelo OO tiene sus claras ventajas pero al momento de la reutilización de módulos y unidades se hace confuso hacer una estimación para llevar el análisis y diseño de tu sistema.

En síntesis. Deberás responderte.

Cita:
¿Donde termina la unión de lo que hace al sistema y comienza lo que responde al propósito general?
Ante cada nuevo sistema, hay un nuevo análisis. Y esta misma pregunta se repite justo en el primer momento de inicio del proyecto. Es necesario saber dar la respuesta, hay que estimar el tamaño, de ello dependerá el buen diseño y evitará confusiones en el futuro.

Espero haberte sido de ayuda. Y si entendí mal, mil disculpas.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 14-06-2007
faraonDX faraonDX is offline
Miembro
 
Registrado: jun 2007
Posts: 24
Poder: 0
faraonDX Va por buen camino
construyendo piramides


Me alegra mucho que hallas, respondido a mis interrogantes, he visto algunos comentarios tuyos en diferentes temas y estoy de acuerdo en casi todos. En realidad tambien pienso que antes de escribir una linea de código hay que tener claro la idea esacta de como quedará el sistema, proyectando una arquitectura en la cual se apliquen los diferentes patrones de diseño, es presisamente esto lo que nos permite tener una mayor reusablidad del código y un facil mantenimiento del sistema.

De todas formas todavia me queda la duda de los controles dataware, comentaba anteriormente sobre el modelo de tres capas los controles dataware a mi juicio pertenecen a la capa de interfaz, estos a la hora de implementar un sistema se relacionan con el datasource que pertenece a la capa lógica y los componentes dataset(adotable) pertenece a la capa de datos, por la relación anterior es que me imagino, "a lo mejor estoy equibocado" despues de un diseño OO no podría o mejor dicho no me sería factible utilizar este tipo de relación entre componentes, ya que los objetos que diseño son los que deben estar en relación con los elementos de la interfaz de usuario.


Gracias por acudir a mis interrogantes espero que sigas comentando sobre este tema.
Responder Con Cita
  #5  
Antiguo 15-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
¿Es esto a lo que te refieres?

Hola de nuevo faraonDX.

Cita:
Empezado por faraonDX

Me alegra mucho que hallas, respondido a mis interrogantes, he visto algunos comentarios tuyos en diferentes temas
¿Lo dices por mi? No se que pensar... que alguien lea mis post y comentarios y que esté de acuerdo... me pone rojo de vergüenza. Ja... no... broma. Ta todo bien.

Cita:
Empezado por faraonDX
En realidad tambien pienso que antes de escribir una linea de código hay que tener claro la idea esacta de como quedará el sistema
No tiene que ser exacta. Pero si lo mejor estimada y precisa posible. Al menos yo, por el momento no me podría decir que mi análisis y diseño será exacto y que siempre será para bien.

Cita:
Empezado por faraonDX
despues de un diseño OO no podría o mejor dicho no me sería factible utilizar este tipo de relación entre componentes, ya que los objetos que diseño son los que deben estar en relación con los elementos de la interfaz de usuario.
¿A que te refieres a que no te gusta el modo en que se relacionan los componetes? Es la manera en que se trabja en Delphi. ¡Los dataware deben estar ligados a las fuentes de datos para funcionar!

¿A que haces referencia cuando dices en relacion con los elementos de la intefaz de usuario?

Por lo que logro entender (corrije por favor si me equivoco), tu tienes un diseño basado en OO. Bien perfecto. Creo que tu problema radica en como hacer comunicar tu capa lógica con tu capa de interfaz. Y por la forma en que vienes redactando tu problema es que empleas elementos dataware y estos se comunican derechito con la capa lógica (datasource).
Ve al diseño de la capa pero con zonas:

----------------------------------------------------------------------
Capa Interfaz:
Zona 1: controles simples - Zona 2: controles dataware
----------------------------------------------------------------------
Capa Lógica:
Zona 1: Tu diseño lógico: Clases - Zona 2: Datasource
----------------------------------------------------------------------
Capa Datos:
Zona 1: Datamodule, xxDataBase, Table, etc...
----------------------------------------------------------------------

Es decir, Se tiene dos canales de trabajo, por un lado el conformado por el repertorio de controles aportados por delphi (dataware, datasource, etc) lo que conforma un diseño en tres capas. Y en forma paralela tu diseño.

Ahora que lo veo, posiblemente Table, Query pertenezcan a la capa lógica. Habría que ver que opinan el resto. Bueno, en fin el resultado será el mismo.

Para hacer comunicar tus objetos con la interfaz (independiente del control que sea) se emplean los eventos necesarios que deban dispararse... y pasar el valor de los datos:

Código Delphi [-]
TuForma.TuControlEvento(parametros);
begin
   TuObjeto.Propiedad := Valor a tomar;
   TuObjeto.Evento;
end.

// O....

TuUnidad.TuControlEvento(parametros);
begin
   TuObjeto.Propiedad := Valor a tomar;
   TuObjeto.Evento;
end;

Y esta filosofía es la que permite que se envién y pasen los mensajes entre tus objetos y después envien los datos hacia el receptor correspondiente.

Por ejemplo puedes aprovechar alimentar a tu objeto cuando los datos han cambiado (on Change de un Data Source). El momento indicado de cuando pasar los datos a tus objetos dependerá del diseño de tus diagramas de secuencia (son fabulosos para ver estas cosas) y otros diagramas que UML nos ofrece.

El ejemplo es muy simple...
No tengo un ejemplo preparado (código) para que te ilustre mejor la idea. He visto unos ejemplos de BD y POO en varias ocasiones en estos foros. Busca con esos términos.

Te puedo recomendar que leas UML y patrones. de Craig Larman, si es que no lo haz leído todavía.

Creo que los maestros te pueden dar una mejor perspectiva del asunto.
No se si termino de explicarte, y de explicarme. Lo más probable es que haya quedado tinta en el tintero por mi parte.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 15-06-2007
faraonDX faraonDX is offline
Miembro
 
Registrado: jun 2007
Posts: 24
Poder: 0
faraonDX Va por buen camino
Hola delphius, permiteme decirte que me estás aportando ideas, y te lo agradesco mucho, de todas formas voy a tratar de cambiar la tónica y basarme un poco en ejemplos prácticos:
se desea hacer un sistema para controlar datos en una agencia, de los autos se tiene (ID, modelo , marca).

Según los que veo en este ejemplo hay dos clases que están presentes: TAgencia y TAuto, y la relación que existe entre ellas es la agregación.

Ahora bien en un proyecto en delphi debo utlizar otros elemetos que me aporta el mismo, como el datamodule en el cual se insertan: Conexion,Query, Table , (datasourse). Por lo menos el datamodule genera una clase en una Unit en la que se pueden implementar diferentes métodos.

La realidad a mi modo de ver es, que para este problema si yo quiciera desarrollarlo rápido ignoraría las clases TAgencia y TAuto y realizaría la relación (Dataware - DataSource - Table) y ya resuelvo el problema, pero si he realizado un diseño OO entonces necesito que los controles Dataware hagan uso de los métodos de TAuto (por ejemplo) y A la vez TAuto haga uso de DataModule , que pinta entonces el Datasource.

Puedes ver un ejemplo sencillo y quizas me entiendas un mejor si visitas el articulo que se encuentra: http://www.rinconcitodelphi.com/arti...PenDelphi1.pdf

Espero que entiendas este problema y que aclare las preguntas que me hiciste como:
Cita:
Empezado por Delphius
¿A que te refieres a que no te gusta el modo en que se relacionan los componetes? Es la manera en que se trabja en Delphi. ¡Los dataware deben estar ligados a las fuentes de datos para funcionar!
Cita:
Empezado por Delphius
¿A que haces referencia cuando dices en relacion con los elementos de la intefaz de usuario?
En realidad quise decir eso:
Cita:
Empezado por Delphius
Pero si lo mejor estimada y precisa posible.
Espero que tambien el problema que puse arriba, te explique mis dudas.
y me puedas argumentar un poco ¿Como ese problema se ve involucrado en:?

Cita:
Empezado por Delphius
----------------------------------------------------------------------
Capa Interfaz:
Zona 1: controles simples - Zona 2: controles dataware
----------------------------------------------------------------------
Capa Lógica:
Zona 1: Tu diseño lógico: Clases - Zona 2: Datasource
----------------------------------------------------------------------
Capa Datos:
Zona 1: Datamodule, xxDataBase, Table, etc...
----------------------------------------------------------------------
Permiteme decirte que en la medida que voy redactando el texto me voy dando cuenta de muchas cosas, creo que casi estoy dando con el clavo.

Disculpa si estoy pidiendo mucho.
Gracias.
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
Sistema TPV con codigo abierto, si es posible Rabata Varios 1 01-02-2006 14:06:08
Arquitectura de un soft con BD adlfv Conexión con bases de datos 1 19-05-2005 18:52:07
Desplegar por código el menú de sistema de una ventana Jan_polero API de Windows 7 06-05-2005 12:35:25
Sun confirma el proyecto de sistema operativo de código abierto 'OpenSolaris' marcoszorrilla Noticias 0 25-01-2005 22:04:10
Sobre Arquitectura De Bd ghost Firebird e Interbase 0 13-10-2004 01:16:51


La franja horaria es GMT +2. Ahora son las 08:00:11.


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