Estoy pensando en elegir Adobe AIR como la tecnología de implementación del lado del cliente para un próximo proyecto. (La opción anterior era C# y WPF, pero últimamente me he quedado muy impresionado con Flash/Flex/AIR.)Creación de una arquitectura de complemento con Adobe AIR
Pero una de las características más importantes de mi producto será su arquitectura de complementos, permitiendo a los desarrolladores de terceros ampliar la funcionalidad y la GUI de maneras interesantes.
Sé cómo diseñaría la arquitectura en C#: un cargador de plug-in enumeraría todos los ensamblajes en el directorio local "app/plugins /". Para cada ensamblaje, enumeraría todas las clases, buscando implementaciones de la interfaz "IPluginFactory". Para cada complemento creado por la fábrica, le pediría sus clases de MVC, y ajustar sus elementos de GUI (elementos de menú, paneles, etc.) en los espacios correspondientes en el diseño de GUI existente.
Me gustaría lograr lo mismo dentro de AIR (cargar complementos desde el sistema de archivos local, no desde la web). Después de leer this article, entiendo que es posible y que la arquitectura básica (cargar SWF en Sandboxed ApplicationDomains, etc.) es muy similar a la forma en que lo haría en .NET.
Pero tengo curiosidad acerca de los problemas.
Si alguno de ustedes ha realizado una carga de clase dinámica con el reproductor flash (preferiblemente en aplicaciones mixtas de flash/flex, y ESPECIALMENTE en el host AIR), me encantaría conocer sus experiencias al construir su marco de plugin y dónde tropezó con situaciones difíciles con el reproductor de flash y con las API de flash, flex y AIR.
Por ejemplo, si alguien me hiciera esta misma pregunta, pero con la plataforma Java en mente, mencionaría definitivamente que la JVM no tiene noción de "módulos" o "ensamblajes". El nivel más alto de agregación es la "clase", por lo que puede ser difícil crear estructuras organizativas dentro de un sistema de complementos para gestionar grandes proyectos. También hablaría sobre problemas con múltiples cargadores de clases y cómo cada uno mantiene su propia instancia separada de una clase cargada (con sus propios vars estáticos separados).
Estas son algunas preguntas específicas sin respuesta para mí:
1) La clase de ActionScript "Cargador" puede cargar un archivo SWF en una ApplicationDomain. Pero, ¿qué contiene exactamente ese dominio de aplicación? Módulos? Clases? ¿Cómo se representan los componentes MXML? ¿Cómo encuentro todas las clases que implementan mi interfaz de complemento?
2) Si ha cargado un complemento en un ApplicationDomain separado de la aplicación principal, ¿es mucho más complicado llamar al código desde ese otro dominio de aplicación? ¿Existen limitaciones importantes sobre los tipos de datos que pueden pasar a través de la capa de clasificación inter-appdomain? ¿Es extremadamente costoso ordenar?
3) Idealmente, me gustaría desarrollar la mayoría de mi propio código principal como un complemento (con la aplicación principal siendo poco más que un shell de carga de complementos) y usar la arquitectura del complemento para elevar esa funcionalidad al aplicación ¿Eso te da miedo en tu corazón?
Muy bonito. ¿Tu API de complemento es de código abierto? – benjismith
No, e incluso si lo fue, es bastante específico para la aplicación para la que fue escrito. Todo lo que es "genérico" al respecto se explica bastante en la respuesta que escribí. – hasseg
Gotcha. Echaré un vistazo a tus enlaces. (Solo comencé con flex la semana pasada, así que no sé mucho sobre Flex Modules aún). Una pregunta más, sin embargo ... En una aplicación de AIR conectable, me gustaría que los usuarios puedan * instalar * complementos. Dado el instalador estándar de AIR, ¿cómo recomendaría manejar eso? – benjismith