No tenemos una arquitectura de complementos como tal, pero explicaré cómo mantenemos nuestro código de cliente ligeramente acoplado, y tal vez te dará algunas ideas
Estamos usando asp.net. Entregamos una página main.aspx que primero incluye un archivo javascript mediador. Define un objeto global, llámalo mediador, que es el único objeto global que definimos.
El mediador expone una interfaz sencilla con la publicación y suscripción mensajes:
mediator.subscribe(messageName, callback);
mediator.publish(messageName);
vez que el archivo mediator.js, la página principal incluye una serie de otros archivos JavaScript, cada uno de los cuales consta de una función inmediata que registra su funcionalidad con el mediador. Más sobre este patrón se puede encontrar here, o ver una pregunta anterior de la mía here.
Podría seguir un enfoque similar: definir un solo objeto global (por ejemplo, pluginFramework) que ofrezca una interfaz para que los complementos puedan registrar su funcionalidad. Cuando construye la página html para entregar al cliente, primero incluya el archivo pluginFramework y luego incluya dinámicamente los archivos de plugin de JavaScript deseados, que podrían depender del usuario o del dispositivo (por ejemplo, diferentes complementos si el dispositivo está habilitado por contacto). Estos archivos de complemento agregarían su funcionalidad al pluginFramework con una función inmediata.
Aquí es un ejemplo de cómo permitir que los plugins para agregar funcionalidad a un menú en la interfaz de usuario:
pluginFramework.js:
var pluginFramework = (function() {
var menuItems = [];
function addMenuItemPrivate(itemName, callback) {
// e.g. add itemName and callback to menuItems
}
return {
addMenuItem: addMenuItemPrivate;
}
})());
photoPlugin.js:
(function() {
function addPhoto() {
//...
}
pluginFramework.addMenuItem('add photo', addPhoto)
})());
Hope esto fue de alguna manera útil!
¿Qué tipo de funcionalidad desea ampliar con los complementos? Necesito algún tipo de ejemplo para entrar en esto. – GarethOwen
1 ejemplo es como en WordPress, podría ampliar la funcionalidad a través de widgets y ganchos. Otro ejemplo podría ser Tumblr. Podría haber una publicación de texto básica, luego más tipos de publicaciones como Foto, Código, etc. –
¿A quién anticipa que va a hacer extensiones? ¿Es un equipo interno, o es alguien en Internet? Es la aplicación web muy específica, por ej. un sistema de tarjeta de tiempo para autónomos, o es genérico, p. un sistema de gestión de contenido? –