¿Cuáles son los mejores recursos si desea crear una aplicación con modularización? [cerrado]

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

  •  03-07-2019
  •  | 
  •  

Pregunta

En mi análisis de las plataformas / aplicaciones web más nuevas, como Drupal, Wordpress y Salesforce, muchas de ellas crean su software basado en el concepto de modularización: donde los desarrolladores pueden crear nuevas extensiones y aplicaciones sin necesidad de cambiar el código en el "núcleo" sistema mantenido por los desarrolladores principales. En particular, sé que Drupal usa un "gancho" sistema, pero no sé mucho sobre el motor o el diseño que lo implementa.

Si tuviera que seguir el camino de la creación de una aplicación y deseara un sistema que permitiera la modularización, ¿por dónde comenzar? ¿Es este un patrón de diseño particular que todos conocen? ¿Existe un manual al que este paradigma tiende a suscribirse? ¿Hay algún sitio web que discuta este tipo de desarrollo desde cero?

Sé que algunas personas apuntan directamente a OOP, pero eso no parece ser lo mismo, por completo.

Este sistema en particular que estoy planeando se inclina más hacia algo como Salesforce, pero no es un sistema CRM.

En aras de la pregunta, por favor ignore el argumento Comprar vs. Construir , ya que esa consideración ya está en proceso. En este momento, estoy investigando el aspecto de construcción.

¿Fue útil?

Solución

Hay dos maneras de ir por aquí, cuál tomar depende de cómo se comportará su software.

Una forma es el complemento ruta , donde las personas pueden instalar nuevo código en la aplicación modificando los aspectos relevantes . Esta ruta exige que su aplicación sea instalable y no solo se ofrezca como un servicio (o si instala y revisa el código enviado por terceros, una pesadilla).

La otra forma es ofrecer una API , que puede ser llamado por las partes relevantes y hacer que la aplicación transfiera el control al código ubicado en otro lugar (a las aplicaciones de Facebook) o haga que la aplicación haga lo que los comandos API permiten al desarrollador (a la Google Maps).

Aunque los mecanismos varían y la forma de implementarlos difiere, en cualquier caso, debe definir

  • ¿Qué libertad les daré a los usuarios?
  • ¿Qué servicios ofreceré a los programadores para personalizar la aplicación?

y lo más importante:

  • Cómo habilitar esto en mi código sin dejar de ser seguro y robusto. Por lo general, esto se realiza mediante el sandboxing del código, validando entradas y potencialmente ofreciendo capacidades limitadas para los usuarios.

En este contexto, los enlaces son lugares predefinidos en el código que llaman a la función de enlace de todos los complementos registrados, si están definidos, modificando el comportamiento estándar de la aplicación. Por ejemplo, si tiene una función que representa un fondo, puede tener

function renderBackground() {
    foreach (Plugin p in getRegisteredPlugins()) {
        if (p.rendersBackground) p.renderBackground();
    }
    //Standard background code if nothing got executed (or it still runs, 
    //according to needs)
}

En este caso, tiene el enlace 'renderBackground' que los complementos pueden implementar para cambiar el fondo.

En una forma API, la aplicación de usuario llamaría a su servicio para obtener el fondo prestado

//other code
Background b = Salesforce2.AjaxRequest('getBackground',RGB(255,10,0));
//the app now has the result of calling you

Todo esto también está relacionado con el Principio de Hollywood , que es bueno aplicar , pero a veces simplemente no es práctico.

Otros consejos

El Patrón de complemento de P de EAA es probablemente lo que busca. Cree una interfaz pública para su servicio en la que los complementos (módulos) se puedan integrar a ad-hoc en tiempo de ejecución.

Esto se llama arquitectura de componentes. Es realmente un área bastante grande, pero algunas de las cosas importantes clave aquí son:

  • composición de componentes (los componentes del contenedor pueden contener cualquier otro componente)
    • por ejemplo, una cuadrícula debería poder contener otras cuadrículas o cualquier otro componente
  • programación por interfaz (los componentes interactúan a través de interfaces conocidas)
    • por ejemplo, un sistema de vista que podría pedirle a un componente que se renderice a sí mismo (digamos en HTML, o se le podría pasar un área de renderizado y pedirle a la vista que dibuje directamente en él
  • uso extenso de registros dinámicos (cuando se carga un complemento, se registra con los registros apropiados)
  • un sistema para pasar eventos a componentes (como clics del mouse, cursor, etc.)
  • una notificación
  • gestión de usuarios

¡y mucho, mucho más!

Si aloja la aplicación, publique (y dogfood) una API RESTful.

Si está distribuyendo software, mire OSGi .

Aquí hay un pequeño video que al menos te dará algunas pistas; el proceso de Lego [menos de 2 minutos de duración]

También hay una receta completa sobre cómo crear su propio marco basado ampliamente en la Modularización ...

El elemento clave más importante para hacer software modularizado es recordar que es puramente [principalmente] una cuestión de qué tan débilmente acoplado puede crear sus sistemas. Cuanto más flojamente acoplado, más fácil es modularizar ...

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