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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-02-2008
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
Solicito su opinión sobre mi modelado

Desde siempre me ha gustado la cosa esta del OOP sin embargo miles de topes me he dado al tener que modelar modelos (válgase la expresión) E-S en OOP. Como ya sabemos nuncan cuadra al 100%. No quiero usar eso de ECO porque sabe como a .NET (ni lo mande Dios) ni de cosas raras por ahí. Casi siempre me encuentro con el siguiente problema:

Tenemos una ventana que muesta digamos las facturas pendientes por registrar en la contabilidad (de entrada nace TFactura que puede tener a su vez TCliente y TPartidas así como muchas propiedades más). Bien, como TFactura es en realidad un registro de una BD y a su vez lo son TCliente y TPartidas (este último es el detalle de la tabla facturas hablando en términos de BD). De entrada para mostrar todas las facturas lo mas simple es hacer un query y mostrarlo en una tabla, pero coño, entonces donde ha quedao nuestra TFactura. Pensé en una TCollection de TFacturas pero entonces para que coño esta TDataset y los componentes DBAware de Delphi???.
Lo que hice es esto:

Modelé una TFactura y demás parafernalia. TFactura recibe una conexión a la BD para recuperar el contenido de cada registro y almacernarlo en sus propiedades, digamos que cada propiedad tiene que que ver con un campo de la BD. Ahora bien, las partidas, ah las partidas. Bueno, yo lo que hices es darle una propiedad Partidas a TFactura que es en realidad un TClientDataset para crear una tabla en memoria la cual TFactura es capaz de llenar a partir de la tabla de detalle de la BD y a su vez guardar en la BD.

De esta forma puedo usar digamos una rejilla para mostrar el detalle de TFactura usando componentes dbAware. Claro que para la actualización de la BD sí utilizo comandos SQL como INSERT o UPDATE según el caso. Digamos que TFactura sabe como guardarse en la BD y como guardar su "detalle" en la misma BD. De tal suerte que para guardar la factura solo llamo a TFactura.Save quien a su vez llama a SaveDetail quien se encarga de guardar el detalle de la factura.

Los constructores normalmente los hago pasádole a la clase una conexión a la BD que utilizo: TFactura.Create(ZMyConnection) (uso Zeos)


He notado que un efecto adicional es que dejo totalmente independiente la BD de mi modelo de objeto, de manera que si hay excepciones las puedo manejar dentro de mi clase principal sin llegar a la BD más que cuando ya se ha validado casi todo.

Me hubiera gustado prescindir por completo de componentes dbaware pero esto requiere mucho más código y terminaría haciendo cosas al estilo Java y en Delphi se supone que todo se puede hacer mucho más rápido.

Comentarios:¿Es un modelado adecuado? ¿Se me ha pasado algo? ¿Mejor le cambio?
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
 



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
Solicito recomendación sobre formas de programar Monxy Varios 6 22-04-2007 21:30:17
Opinión sobre un proyecto nuevo. ppb Linux 2 17-01-2007 13:40:25
Vuestra opinión sobre el API XML-RPC de una aplicación dec Internet 32 09-12-2006 21:09:57
Solicito informacion sobre Temporizacion neto57 Varios 0 21-09-2006 03:06:22


La franja horaria es GMT +2. Ahora son las 14:19:57.


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