¿Cuáles son algunas formas diferentes de implementar un sistema de complementos?

StackOverflow https://stackoverflow.com/questions/99497

  •  01-07-2019
  •  | 
  •  

Pregunta

No busco tanto respuestas específicas del idioma, solo modelos generales para implementar un sistema de complementos (si quieres saberlo, estoy usando Python).Tengo mi propia idea (registrar devoluciones de llamadas y eso es todo), pero sé que existen otras.¿Qué se usa normalmente y qué más es razonable?

¿Qué quieres decir con un sistema de complementos?¿Los contenedores de inyección de dependencia y COI parecen una buena solución?

Quiero decir, bueno, una forma de insertar funcionalidad en el programa base sin alterarla.No tenía intención de definirlo cuando comencé.La inyección de dependencia no mirar particularmente adecuados para lo que estoy haciendo, pero no sé mucho sobre ellos.

¿Fue útil?

Solución

Hay una muy buena episodio de Radio de ingeniería de software, que te puede interesar.

Para referencia futura, he reproducido aquí el "Reglas para habilitadores" (enlace alternativo) dado en el excelente Contribuyendo a Eclipse por Erich Gamma, Kent Beck.

  • Regla de invitación: siempre que sea posible, permita que otros contribuyan a sus contribuciones.
  • Regla de carga diferida: las contribuciones solo se cargan cuando son necesarias.
  • Regla de plataforma segura: como proveedor de un punto de extensión, debe protegerse contra el mal comportamiento por parte de los extensores.
  • Regla de juego limpio: todos los clientes siguen 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 las buenas barreras: cuando pase el control fuera de su código, protéjase.
  • Regla API explícita: separe la API de las partes internas.
  • Regla de estabilidad: una vez que invites a alguien a contribuir, no cambies las reglas.
  • Regla de API defensiva: revele solo la API en la que confía, pero esté preparado para revelar más API a medida que los clientes la soliciten.

Otros consejos

Una arquitectura de complemento simple puede definir una interfaz de complemento con todos los métodos que el complemento debería implementar.El complemento maneja eventos de la aplicación y puede usar el código estándar de la aplicación, objetos modelo, etc.para hacer las cosas.Básicamente lo mismo que hace un formulario ASP.NET, excepto que estás anulando en lugar de implementando.

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 darle al complemento oportunidades periódicas para actuar.Si un complemento puede registrar un observador, entonces se deben intentar/captar las llamadas al delegado.

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

Qué tal si fábrica abstracta?Su programa base define cómo interactúan los conceptos abstractos entre sí, pero la persona que llama debe proporcionar la implementación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top