Ver Mensaje Individual
  #2  
Antiguo 04-07-2005
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.293
Reputación: 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
Bueno, hace un año y medio me encontré en una situación muy similar a la tuya, así que como mínimo te puedo detallar dónde estoy y cómo me va un año y medio después... Es como si puedieras ver el futuro...

No me quiero extender mucho (si a partir de eso tienes dudas sobre algo concreto o quieres que hablemos más en detalle sobre algo, lo comentamos,... sin problemas...), simplemente comentarte que el proyecto era bastante similar; SQL Server, Delphi 6 (en nuestro caso), aunque no se descartaban posteriores, número de puestos muy elevado, posiblemente acaben siendo unos 350/400.

Las premisas:
* Un modelo de persistencia para las reglas de negocio donde poder programar las clases como "cajas negras" (tal y como dices tu).
* Trabajar con componentes estandard (nada de componentes propietarios tipo BOLD -salvo que no hubiera otro remedio-)
* Muy importante trabajar basádonos en SQL, nada de componentes conectados... (la idea era controlar al máximo el tráfico de red y las operaciones que se realizaban).
* No hacía fala que fuera Multiplataforma, ni MultiSGBD. Queda bonito, pero en la práctica iba a funcionar sobre SQL Sever y Windows.
* Poder diseñar sobre UML y en lo posible Generar a partir de eso los modelos (código Delphi y estructura en la Base de Datos).

Éstas eran las principales; A partir de aquí y evaluando lo que hay -o lo que había en ese momento- en el mercado (en mi caso ya los tenía vistos...) se decidió crear una estructura desde cero (propietaria); Cosas que miramos en su día:

* BOLD: A mi entender el Gran problema de Bold son los componentes que utiliza; Propietarios; En ningun caso tienes código fuente, o al menos cuando yo lo miré. La creación que hace de tablas y su estructura (no se ajustaba a lo que nosotros queríamos) y sobre todo la falta de documentación y expreriencia en grandes proyectos y la falta de control absoluto sobre "lo que hacía" (en cuanto a Base de Datos).
* JEDI Obiwan Object Persistence Framework; En su momento estaba en pañales, ahora desconozco por dónde va.
* SPIDER containers and persistet clases for Delphi: En su momento nos pareció un poco "atascado" y además teníamos dudas de que pudiera funcionar al nivel de grandes proyectos.
* InstantObjects for Delphi: Muy básicos; Tenían una cosa buena, que es que trabajaban con controles estandard. Posteriormente, la empresa (seleqt) abandonó el desarrollo. Actualmente han pasado a SourceForge.
http://sourceforge.net/projects/instantobjects/
* TechInsite Object Persistence Framework: En su día estaba bastante "en pañales" y demasisdo extenso para lo que necesitabamos.
* Alguna otra cosa de poco importancia...

CONCLUSIÓN: Acabamos realizando nuestro propio sistema de Persistencia. Se puede hacer (en mi caso es el segundo que hago -ya que en mi empresa enterior también hice uno-; Justo por eso me contrataron en ésta), y ambos están funcionando. El actual no está "a pleno rendimiento" todavía, pero en las pruebas que realizamos responde bien.

CONSEJO: Es un trabajo de 1 año/año y medio mínimo; para generar algo productivo a un nivel alto (estamos hablando de aplicativos grandes y con necesidades altas). Así que antes de "meterte" en un "fregado" como ese asegúrate.

A lo que hemos llegado nosotros: (lo intentaré explicar en pocas palabras, para que tengas una idea).
(1) Se diseña en UML (Rational Rose). Clases; Orientación a objetos.
(2) Con una utilidad (propia), se genera a partir de los ficheros MDL de rational (utilizan formato llamado PETAL, que básicamente es un LISP):
+ Ficheros .PAS con la estructura de las clases; Modelo de Negocio.
+ Tablas necesarias, Vistas, y demás en la Base de Datos. El mapeo que usamos en BD es de (Varias tablas por clase -La documentación de Scott Ambler explica las posibilidades con bastabte claridad-)
+ Ficheros relacionados con las clases para multiidioma y posterior traducción.
+ Documentación en formato HTML, que despuyés se utiliza para generar la ayuda, a partir de los comentarios y documentación que se introduce en Rational.
+ A parte genera un esqueleto para el Browse y el Edit de la clase, que posteriormente "carga en Delphi".
(3) La parte que corresponde a la Persistencia funciona de forma sencilla -conceptualmente-; Tenemos un componente (-el más importante de todos-) que deriva de un TDataSet que conecta Componentes Data-Aware con la Base de Datos, con el añadido de que utiliza el modelo de Persistencia (almacenado en PAS).
Para que me entiendas es como si fuera el componente estandard, pero de Read-only; En el momento en que se hacen operaciones (INSERT/UPDATE/DELETE) no se hacen de la forma estandard (utilizando el componente), sino que se genera el SQL correspondiente y se lanza..

El Gestor de Persistencia es el que se encarga de realizar TODAS las consultas SQL que se utilizan en la aplicación a partir de modelo de Persistencia Generado. Ya ves que la idea es simple. Tienes 1 Base de Datos, un modelo de persistencia almacenado en PAS (formado por Clases) y un Gestor de Persistencia en medio que los conecta los dos -con una parte de Generación de SQL que en realidad es "la joya de la corona"-.

A partir de ahí, en cada clase se programa el código -las reglas de negocio- de forma que un TCliente tendrá operaciones propias para su tratamiento. Todas las clases que se crean derivan de una Clase básica TObjectModel que posee las operaciones principales; Insert, Delete, Update, Find, Exist, Clone, Assign, Clear, Export, Import, Initialize,...


Espero haberme explicado mínimamente bien; Al final me he alargado un poco,... Si tienes alguna consulta no dudes en hacerla.

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