FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Pasar mi clase a una clase de 3 capas o lo mas parecido
Aqui mi clase, para manejar una tabla de una base de datos, que la tengo en sql server, pero que pasa, ahora me quiero pasar a mysql o firebird y necesito cambiar mi clase, supuestamente la tengo facil tengo que cambiar mis TADOConnection y TADOQuery, por los componentes que vaya a usar para conectarme a la misma tabla pero ahora en distinta base de datos.
Como seria en tres capaz, esta es practicamente la parte de acceso a datos, pero necesito optimizarla porque cada vez que la interfaz pide datos estoy creando una nueva conexion "me ayudan a optimizarla alguna linea a seguir" Todavia no entiendo bien cual seria la capa de logica de negocios Mi clase
Luego a modo de guia les paso la parte que seria la interfaz Para ello diseño la interfaz serian 3 edit id, format_code, description
Por ultimo aclaro que lo que quiero es que me ayuden a optimizar mi clase para hacerme la vida mas facil, y adaptar esto para que queden bien definidas, la parte de acceso a datos, logica de negocios, e interface Entiendo que asi pude separar acceso a datos de la interface, pero creo que me esta faltando un poco para optimizarla aun mas... bueno desde ya les agradezco la ayuda que puedan darme. Última edición por elarys fecha: 07-04-2011 a las 16:54:58. |
#2
|
|||
|
|||
Me falto otra clase que tengo para manejar los datos
|
#3
|
||||
|
||||
Amigo elarys, te doy un par de sugerencias, sin ser experto en el tema de capas...
** Te recomiendo utilizar TClientDataset. Esta es una herramienta muy poderosa que te sirve como interface entre tus componentes de "la capa de datos" y las demás capas. Sin importar que componentes de acceso a datos estes utilizando: ADO, ZEOS, dbexpress, etc. De esta manera tu codigo en las capas superiores no lo tendras que tocar cuando quieras cambiar de base de datos... Es decir, podrías pensar a futuro, en "enchufar" tu aplicación a una base de datos y no en "migrar" de motor. (Obivamente todo tiene sus limites y excepciones) ** Te recomiendo utilizar los componentes dbExpress, aunque cada uno tiene sus gustos y preferencias, pero por mi parte pienso que tienen como ventaja principal, que son componentes nativos de Delphi, y que junto al TClientDataset Embarcadero le esta trabajando bastante orientandolos por a la tecnología DataSnap. ** Utiliza la ventaja del polimorfismo que te brinda la POO. Puedes redefinir tus métodos independiente del comoponete de acceso a datos que utilices. Por ejemplo, hasta donde veo, podrias reemplazar todos tus TADOQuery por TDataset o en últimas por un TClientDatset (que tambien podría tomarse como genérico). Por ejemplo
deberia quedar:
de esta manera cuando migres puedes llamar esta funcion pasando un componente ADO, Zeos, o dbExpress ** Las funciones ConsultarSQL y EjecutarSQL no deberían compartir unidad con tus clases principales (Tdocuments y TDocumentsList), estas debrían estar en un Datamodule y ademas no deberían ser globales, sino que deberían ser parte del propio Datamodule. ** No veo necesario que tus funciones EjecutarSQL y ConsultarSQL deban conectarse cada vez que las requieras... podrías mantener una conexión activa de forma permanente y pasarla como parámetro a tus dos funciones. Tambien es útil si manejas varias bases de datos:
El componente TSqlConnection hace parte de dbexpress, pero puedes utilizar cualquiera, como te dije con estos componentes puedes trabajar varias bases de datos como SQL Server, MySQL, PostgreSQL, DB2, ORACLE... entre otras. ** En cuanto a tus clase principales (TDocuments y TDocumentsList), te recomiendo "liberarlas" de sentencias SQL. y pasar finalmente todo este codigo a un datamodule, haciendo llamadas a procedimeintos.
En el caso de tu funcion búesqueda
De esta manera independizas (un poco) la logica de negocio de la forma como buscas... es decir, el dia de mañana en lugar de realizar la busqueda via SQL, podrias utilizar un porcedimiento almacenado, o cualquier otra funcionalidad que tu motor escogido te ofrezca. y no tendrias por que tocar la logica que plantea tu clase... Finalmente, el Datamodule será el componente duro, pues alli estarán "las tripas" de la aplicación... es alli donde sabras como te conectas a tu BD. espero que te sirva, un saludo, |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Pasar datos a una clase de un WS | gcaffe | Internet | 1 | 17-12-2010 17:42:52 |
clase que contiene otra clase definida de forma posterior | astwin | OOP | 5 | 20-02-2009 12:26:55 |
¿¿Es posible pasar una clase como parámetro con el modificador var?? | PaFernan99 | OOP | 3 | 09-02-2009 19:49:00 |
Clase | jakuna | OOP | 2 | 30-08-2007 22:50:35 |
...la clase... | Jure | Humor | 0 | 27-07-2004 21:00:47 |
|