Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Spring Framework, Runtime Packages y Plugins (https://www.clubdelphi.com/foros/showthread.php?t=76423)

LoPiTaL 31-10-2011 13:15:57

Spring Framework, Runtime Packages y Plugins
 
Hola a todos!

A raíz de un video que he visto del Coderage 6 se me ha ocurrido una nueva forma de tratar los plugins. Al final están todos los links. Os cuento:

La "spring framework" es una librería para eliminar la dependencia entre units. El video que indico más abajo está muy bien explicado, y se ve claramente el objetivo de eliminar toda la dependencia entre clases para trabajar únicamente con Interfaces, sin tener que realizar nunca una llamada a TMyClass.Create.

Mi problema con los plugins es el siguiente: generalmente, tengo un paquete padre en el que declaro las clases, de las que los plugins deben derivar para que sean reconocidos. Cualquier cambio a este paquete, me obligaba a recompilar TODOS los paquete derivados, y por tanto, tener que redistribuir de nuevo todos los paquetes, perdiendo la gracia de los plugins. Si se trabajaba en el paquete padre con interfaces, sin tener una implementación, entonces TODOS los paquetes plugin tenían que implementar toda la lógica cada vez, perdiendo también su funcionalidad.
Entonces me pregunté (después de ver el vídeo claro :D ), ¿y si utilizo la "spring framework" en mi aplicación principal, dejo un paquete exclusivamente para interfaces (sería el equivalente al paquete padre) y después todos los plugins utilizan estas interfaces, sin necesidad de crear ninguna clase, dejando esa tarea a la "spring framework"?

Funcionó!

¿Cuál es la diferencia entre antes y ahora?
Antes necesitaba derivar de una clase que aparecía en el paquete padre. Si la implementación de dicha clase cambiaba, había que recompilar todos los plugins derivados de éste.
Ahora, en el paquete padre sólo hay una o varias interfaces, y la implementación se encuentra en un segundo paquete, conectado en runtime mediante la "Spring Framework". El resto de paquetes (o incluso el .exe principal), no ven los paquetes de implementación, sino sólo el de interfaz, por tanto, puede cambiar el paquete de implementación sin necesidad de recompilar el resto.
He conseguido desacoplar todos los plugins del paquete principal, cosa que sin este framework era imposible.

Además, he comprobado que si se modifica el paquete de implementación de modo que sólo se añaden interfaces (no se modifican las ya existentes), no hace falta recompilar todos los paquetes, dado que las interfaces viejas no han cambiado.

Os he dejado los links en http://www.clubdelphi.com/foros/showthread.php?t=76420, concretamente el titulado "Delphi, Dependency Injection, and the Delphi Spring Framework" se encuentra en http://cc.embarcadero.com/item/28573. La librería "Spring Framework" la podeis encontrar en http://code.google.com/p/delphi-spri...ource/checkout. La única pega es que el framework funciona únicamente con Delphi 2010 o superior (ya que utiliza el RTTI nuevo, que apareció en esa versión de Delphi).

Os dejo también un pequeño proyecto, en el que utilizo un paquete padre con dos interfaces, dos paquetes con implementaciones de dichas interfaces, y el .exe que utiliza exclusivamente el paquete padre, sin saber nada de los otros dos (sólo los carga), ni siquiera crea instancias de las clases de éstos, pero llama a métodos de dichas clases (MAGIA!!! :D ). De hecho, en ambos paquetes, la sección de "interface" de sus units están vacías, para evitar acoplar código: http://www.terawiki.clubdelphi.com/a...gFramework.rar

La verdad, le veo mucho futuro al spring framework este, tanto para facilitar la depuración de código (eliminando dependencias) como gestor de plugins.

Un saludo,
LoPiTaL

Casimiro Notevi 31-10-2011 13:33:59

Hola, puedes subirlo a nuestro FTP, en la sección que corresponda.

LoPiTaL 31-10-2011 13:40:40

Ok, subido. No sabía que todos podíamos subir archivos al FTP.

Un saludo,
LoPiTaL


La franja horaria es GMT +2. Ahora son las 01:46:22.

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