Ver Mensaje Individual
  #2  
Antiguo 26-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
Delphius Va camino a la fama
Cita:
Empezado por AzidRain Ver Mensaje
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???.
Eso precisamente es una de las tantas preguntas que me hago yo.

Cita:
Empezado por AzidRain Ver Mensaje
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.
Hasta allí creo que logro entenderte.

Cita:
Empezado por AzidRain Ver Mensaje
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.
¡Espera el carro!¿Qué?
Se que no soy un experto en la materia, pero si hay algo que no me gusta mucho es que un objeto de la capa del dominio se meta en la capa de base de datos.
O yo estoy entendiendo mal, amigo... o es que aquí falta aclarar algo.
No es por criticar, pero normalmente, cuando uno menciona TCliente, TFactura, etc..., hace referencia a algo independiente de una base de datos (Si... tu me diras que al final de cuentras se resume en base de datos), y si haces que TFactura tome dicha función estás perdiendo cohesión amigo y aumentando el acoplamiento hacia algo que, en principio, no debería suceder.

Cita:
Empezado por AzidRain Ver Mensaje
Los constructores normalmente los hago pasádole a la clase una conexión a la BD que utilizo: TFactura.Create(ZMyConnection) (uso Zeos)
¿De quien desciende TFactura? Ya estoy confundido.


Cita:
Empezado por AzidRain Ver Mensaje
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?
Tienes razón al decir que debería hacerse todo más rápido en Delphi, y más fácil... eso lo ofrecen los DataWare... pero también hay que tener presente otras cosas: ¿Porqué hacemos TFactura? ¿Que nos beneficia sino la usamos en otros lados también? A lo que voy amigo, es que como tu sabes emplear dataware es un arma de doble filo, si se emplea mal terminas con un sistema en poco tiempo pero que dificilmente sea reusable, si optamos por seguir un buen uso de objetos... conseguimos aquellas filosóficas ideas que propone la POO pero nos resulta más complicado.

Se que no he dicho algo nuevo, y amigo.. me gustaría poder decirte si haces bien o haces mal... pero si hay algo que le he aprendido, más que nada por los golpes, es que no hay 2 diseños que estén absolutamente bien, y mal.

Me encantaría poder tener algo más visual sobre lo que te estás planteando. No me refiero a código, sino a diagramas, pero eso ¿es pérdida de tiempo no?

No ayudo en nada con lo dicho, pero es que debo admitir que tomaste mi atención al decir que TFactura sabe como debe guardarse en una BD. Lo correcto sería que TFactura delegue el trabajo a alguien a quien sabe de base de datos.

Si puedes darte el tiempo, me gustaría que profundices tus explicaciones. Se que es probable que mis novatas experiencias no aporten demasiado al tema, pero cualquier pedacito que pueda aportar, aquí me tienes.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita