PDA

Ver la Versión Completa : Definir Mis Propias Clases


jberaza
27-09-2004, 15:37:54
Estimados amigos del foro, he recorrido este foro en busca de algunos ejemplos pero no los he encontrado.
Estoy comenzando a trabajar con mis propias clases abandonando los viejos metodos desordenados donde todo se repite n veces. Para ello estoy creando mis propias clases tales como

Tcliente = class
private
Id:integer;
Nombre:string;
Direccion:string;
etc.
etc.
public
procedure SetId(i:integer);
function GetId:integer;
etc.
etc.
end;

Durante dias he buscado en internet varios ejemplos para ver si estoy haciendo las cosas bien, pero solo logro encontrar la clase perro, gato, animal, etc. y sobre todo guardadas en arrays o tlist, pero nunca en base de datos, por lo que estos ejemplos simples no se aplican a mi realidad.
No he logrado encontrar un solo ejemplo con las clases tcliente, tarticulo, tfactura, tlineasfactura, etc. que tenga metodos tipo insert, delete, update sobre la base de datos y reamente no se como seguir.

Mi pregunta es si alguien tiene algun diseño simple que me sirva de inspiracion para poder comenzar a pasar mi modelo de datos de mi aplicacion a este mecanismo. Si bien se que no se pueden mandar al foro estos adjuntos agradeceria si alguien se anima a mandarmelos a mi direccion personal jberaza@adinet.com.uy.

Estoy un poco perdido y no se como definir todos los accesos a la base de datos para obtener los valores de los objetos, o como hacer para cada query que tengo en el programa, etc.

Bien, desde ya muchas gracias
saludos

Neftali [Germán.Estévez]
27-09-2004, 17:11:08
Yo he trabajado (y sigo en ello) en proyectos de éste estilo; En internet puedes mirar infomación sobre Capas de persistencia;

* Proyecto ObiWan (Jedi): http://obiwan.sourceforge.net/
* Documentación ambisoft: http://www.ambysoft.com/persistenceLayer.html
* Artículos: http://www.scalabium.com/
* InstantObjects: http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=18520
http://www.seleqt.com/instantobjects/
http://sourceforge.net/projects/instantobjects/
* tiOPF TechInside: http://www.techinsite.com.au/tiOPF/Default.htm

No puedo enviarte código pues no es de mi propiedad, pero sí puedo solventarte las dudas que tengas (sólo tienes que preguntar...).
En cuanto al diseño, así a grandes rasgos (a muy grandes rasgos), yo trabajo con una "clase base"(1) llamémosla TAppRegistro. En ésta clase están implementados todos los métodos de acceso a Base de Datos. Todas las demás clases pertenecientes al modelo de negocio (TCliente, TProveedor, TFactura,...) derivan de ésta y redefinen (si hace falta alguno de éstos métodos).
Por por lado debes tener un "Diccionario de Datos"(2) que básicamente es el que almacena qué clases tienes definidas en tu aplicación y la estructura de cada una de ellas (su misión es que es utilizada por la parte (3)).
Por otro lado la tercera parte es un "Gestor de persistencia"(3) que realmente es quien interactua con la Base de Datos (capa que independiza tu modelo de la Base de Datos concreta con la que trabajas).

El funcionamiento en sí es sencillo (simplificando mucho): Cuando desde una Clase TCliente se hace un Insert (en realidad se hace desde TAppRegistro), ésta clase llama al "Gestor de persistencia" que utilizando el "Diccionario de Datos" crea la sentencia SQL apropiada y la lanza contra la Base de Datos. TODAS las sentencias SQL, Transacciones,... (en general toda interacción con la BD se hace desde el "Gestor de Persistencia").
En el diccionario de datos tienes todas las clases que se utilizan, los campos/propiedades de esas clases, particularidades de esos campos, y en general toda la información que es "gestor de persistencia" pueda necesitar de una clase.

Sé que es algo muy genérico, pero la pregunta y el sistema tb lo son. Si tienes preguntas o dudas más concretas ya dirás...