Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-10-2011
LoPiTaL LoPiTaL is offline
Miembro
 
Registrado: abr 2009
Posts: 168
Poder: 15
LoPiTaL Va por buen camino
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 ), ¿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!!! ). 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

Última edición por LoPiTaL fecha: 31-10-2011 a las 14:40:19.
Responder Con Cita
  #2  
Antiguo 31-10-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola, puedes subirlo a nuestro FTP, en la sección que corresponda.
Responder Con Cita
  #3  
Antiguo 31-10-2011
LoPiTaL LoPiTaL is offline
Miembro
 
Registrado: abr 2009
Posts: 168
Poder: 15
LoPiTaL Va por buen camino
Ok, subido. No sabía que todos podíamos subir archivos al FTP.

Un saludo,
LoPiTaL
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
INFO: DLL's, BPL's, carga dinámica, carga estática y Packages en Runtime Neftali [Germán.Estévez] OOP 26 13-12-2013 20:29:55
Duda con Build with runtime packages dtomeysoto Varios 5 18-12-2009 22:05:41
Como se crean los packages? lbidi Varios 2 11-05-2004 22:54:51
Comportamiento de los Packages unicode OOP 2 07-09-2003 19:22:38
Plugins saul_montalvo Varios 2 19-08-2003 19:32:49


La franja horaria es GMT +2. Ahora son las 00:00:27.


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
Copyright 1996-2007 Club Delphi