En el diseño de una plataforma de software, ¿cuáles son los elementos clave que conforman una arquitectura conectable con éxito?

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

Pregunta

He estado muy impresionado por el creciente número de plataformas de software que permiten a los desarrolladores externos contribuyen código a través de una arquitectura conectable (plugins / extensiones).

He estado estudiando qué plataformas tienen las mejores comunidades de plugin ...

Excelentes arquitecturas plugin con comunidades próspera de plugin:

A continuación, hay plataformas con las comunidades de plugin menos activos:

(En aras de enfoque, dejemos de lado o ignorar las plataformas que permiten a las aplicaciones de software de pleno derecho, como Microsoft Windows, iPhone y Facebook.)

¿Qué le dirías da una plataforma de software de una arquitectura de plugins éxito con una gran cantidad de plugins, frente a otra plataforma con una comunidad de desarrolladores más pequeños o inactivo?

Sólo para obtener las cosas empezaron, he aquí una lista parcial:

  • La plataforma hace algo ampliamente útil:. Vamos a la gente navegar por la web, comprar y vender cosas, publicar blogs y tablones de anuncios, etc.
  • La plataforma es de código abierto (o como mínimo, el código fuente está disponible gratuitamente).
  • Todas las funciones importantes de la plataforma son totalmente plugabble través de ganchos y filtros.
  • Todos o la mayoría enchufables funciones están bien documentados (o hay un wiki para que los desarrolladores pueden documentar por ti).
  • No hay una lista de correo electrónico o foro donde los desarrolladores pueden compartir plugins, y consejos y trucos
  • No hay una lista de correo electrónico o foro donde los usuarios menos sofisticados pueden obtener ayuda para instalar y configurar los plugins.

¿Qué tipo de cosas puede hacer un desarrollador de plataforma para crear una arquitectura conectable que anima un montón de desarrolladores externos para crear plugins?

¿Fue útil?

Solución

En lo personal hay 3 principales contribuidores a si aprendo a (y lo hacen) a escribir aplicaciones para cualquier sistema dado:

es el sistema muy útil para que yo quiero usar lo suficiente como para ser lo suficientemente motivado para extenderlo?

es el sistema que utiliza un lenguaje que estoy familiarizado con, o es fácil de aprender y no de algún solución oscura o de dominio privado o demasiado complicado (ver elisp)?

es el sistema de plugins muy bien documentada en un lenguaje claro para que pueda seguir con el trabajo de escribir mi plugin y no gastar horas (o días) para descifrar el sistema?

Si estas cosas son ciertas, la única razón por la que no le gustaría desarrollar para una plataforma es que alguien ya ha escrito complementos para todas sus ideas. :)

Creo que es también muy útil / importante tener un repositorio central y bien conocidos por albergar usuario contribuido plugins (como por sus proyectos de ejemplo). Odio tener que buscar en la web para encontrar individuo, posiblemente baja calidad o incluso posiblemente maliciosos complementos para algo que estoy tratando de hacer. Esto debería ser un sitio web o incluso como wiki foros o archivos de listas de correo puede ser molesto y requiere mucho tiempo para cavar a través.

Otros consejos

Te estás perdiendo el punto.

La JVM es una arquitectura conectable. Cada archivo de clase se conecta a ella y se extiende a él.

Apache es una arquitectura conectable a varios niveles. Hay los "mods". Algunas modificaciones se ejecutan otros intérpretes, que son ellos mismos arquitecturas enchufables. PHP, mod_wsgi / Python, etc., están todos enchufado en Apache.

Python es una arquitectura conectable con los archivos de Python .pyc y archivos de objetos (de .DLL, de .so) que se conectan a él.

Cada marco lenguaje es - de hecho -. Una arquitectura conectable

La Plataforma es una Fundación

Una vista de una plataforma de software es como una base sobre la que se apoya el otro software con el fin de realizar otra tarea. Esto puede costura una declaración simple y bastante obvio, pero es muy importante.

Los fundamentos debe ser fácil

Una plataforma debe tener un propósito y desarrolladores de la plataforma debe ser consciente de esto al diseñar APIs para que sea obvio lo que los casos de uso primarry son y las API alrededor de ellos debe hacerse tan straightford como sea posible para su uso con respecto a la forma que están diseñados, sino también con respecto a la doccumentation alrededor de ellos.

Puntos de extensión debería ser obvio

extensibilidad en un platoform trata de proporcionar a los desarrolladores la oportunidad de adquirir un de ampliar o cambiar la plataforma. Si esto es algo que desea animar a continuación, es necesario hacer muy clara la naturaleza y limitaciones de esta extensibilidad y proporcionar un conjunto bien definido de interfaces para permitir esto.

Todo esto puede sonar obvio, pero si quieres una comunidad a desarrollar en torno a una plataforma, la plataforma debe tener un uso y extendiéndola debe ser una experiencia directa.

Lo siento si esto costuras un poco "astronaught achitectural", yo creo que hice algunos puntos válidos, que puede muy bien haber hecho mal, no dude en señalar esto o añadir a ellos

No se olvide Eclipse (con > 1000 registró 3 ª parte "plugins" (en realidad están hechos de plugins aún más pequeños en la terminología Eclipse)). Parte de su éxito puede venir de que hay buenas reglas generales sobre cómo diseñar un plugin que también es extensible por otros. También hay una estricta política de control de versiones de la API (que por supuesto tiene sus desventajas, también).

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