2008-09-19 8 views
5

No estoy buscando tanto respuestas específicas de idioma, solo modelos generales para implementar un sistema de complemento (si quiere saber, estoy usando Python). Tengo mi propia idea (registrar devoluciones de llamadas, y eso es todo), pero sé que existen otros. ¿Qué se usa normalmente, y qué más es razonable?¿Cuáles son algunas formas diferentes de implementar un sistema de complemento?

¿Qué quiere decir con un sistema de complemento? ¿Los paquetes de Inyección de Dependencia y COI suenan como una buena solución?

Quiero decir, bueno, una forma de insertar funcionalidad en el programa base sin alterarlo. No tenía intención de definirlo cuando partí. Inyección de Dependencia no es mira particularmente adecuado para lo que estoy haciendo, pero no sé mucho sobre ellos.

+0

Me gustaría ver un debate sobre cómo manejar la comunicación entre complementos. ¿Utiliza uno los eventos públicos? Espacios de tema? –

+0

¿Qué quiere decir con un sistema de complementos? ¿Los paquetes de Inyección de Dependencia y COI suenan como una buena solución? –

Respuesta

1

Hay una muy buena episode de Software Engineering Radio, que puede estar interesado.

Para referencia futura, he reproducido aquí el "Rules for Enablers" (alternative link) dada en la excelente Contributing to Eclipse por Erich Gamma, Kent Beck .

  • Invitación Regla - Siempre que sea posible, que los demás contribuyen a sus contribuciones.
  • Regla de carga diferida: las contribuciones solo se cargan cuando se necesitan.
  • Regla de plataforma segura: como proveedor de un punto de extensión, debe protegerse contra la mala conducta de los extendedores.
  • Regla de juego limpio - Todos los clientes juegan con las mismas reglas, incluso yo.
  • Regla de extensión explícita: declara explícitamente dónde se puede extender una plataforma.
  • Regla de diversidad: los puntos de extensión aceptan múltiples extensiones.
  • Regla de buenas cercas - Al pasar el control fuera de su código, protéjase.
  • Regla de API explícita: separa la API de las internas.
  • Regla de estabilidad: una vez que invite a alguien a contribuir, no cambie las reglas.
  • Regla de API defensiva: revele solo la API en la que tiene confianza, pero prepárese para revelar más API a medida que los clientes lo soliciten.
1

En Python puede usar el sistema de punto de entrada provisto por setuptools y pkg_resources. Cada punto de entrada debe ser una función que devuelva información sobre el plugin: nombre, autor, configuración y funciones de desmontaje, etc.

2

Una arquitectura de plugin simple puede definir una interfaz de plugin con todos los métodos que el complemento debe implementar. El complemento maneja el evento desde la aplicación y puede usar el código estándar de la aplicación, los objetos modelo, etc. para hacer las cosas. Básicamente lo mismo que un formulario ASP.NET, excepto que está sobrescribiendo en lugar de implementar.

Nadie me enseñó esta parte, y no soy un experto, pero siento: en general, un complemento será menos estable que su aplicación, por lo que la aplicación siempre debe tener el control y solo dar al plugin oportunidades periódicas para actuar . Si un complemento puede registrar un observador, las llamadas al delegado deben ser probadas/capturadas.

0

¿Qué tal abstract factory? Su programa base define cómo los conceptos abstractos interactúan entre sí, pero el que llama tiene que proporcionar la implementación.

Cuestiones relacionadas