Una vez resuelto el problema de cargar complementos (en .NET a través de MEF en el caso), el siguiente paso para resolver es la comunicación con ellos. La forma más simple es implementar una interfaz y usar la implementación del complemento, pero a veces el complemento solo necesita extender la forma en que funciona la aplicación y puede haber muchos puntos de extensión.Arquitectura para la extensión/comunicación del complemento
Mi pregunta es acerca de cómo lidiar con esos puntos de extensión. He visto diferentes maneras de hacerlo, pero no estoy seguro de los pros y los contras de cada uno y si hay más y mejores maneras de lograr esto:
- Eventos: Adición de eventos estáticos a todas las cosas queremos hacer "extensible". Por ejemplo, si deseo agregar una validación personalizada para una clase de usuario, puedo agregar un controlador de evento estático OnValidation y agregarle eventos desde el complemento cuando se construya.
- Mensajería: Tener un bus y un mensaje. El complemento puede suscribirse a un mensaje en particular y hacer cosas cuando otra clase lo publique. El mensaje debe contener el contexto en el que el complemento puede funcionar. En el caso de validación, la capa lógica publicará un mensaje de validación de usuario y el complemento actuará cuando se reciba el mensaje.
- Interfaces: la aplicación de host es responsable de llamar a todos los complementos que implementan ciertas interfaces y darles el contexto de la operación actual. En el caso de la validación, el complemento puede implementar un IValidator o IUserValidator con un método de validación (contexto del objeto).
¿Alguna vez ha utilizado uno de los enfoques expuestos? ¿Cuál funcionó mejor para ti?
Y antes de preguntar, nuestra aplicación es un núcleo extensible (usuario, rola y gestión de contenido) para construir nuestras aplicaciones web centradas en el contenido específicas del cliente además de eso. Todo construido en ASP.NET MVC.
Las interfaces probablemente serían mi enfoque, aunque depende de la aplicación y sus necesidades de complementos. Pero es una forma muy limpia de hacer complementos, y también será fácil aislar excepciones del complemento. –