Ao projetar uma plataforma de software, quais são os principais elementos que compõem uma arquitetura conectável bem sucedido?

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

Pergunta

Eu tenho realmente impressionado com o número crescente de plataformas de software que permitem que desenvolvedores externos contribuir com o código através de uma arquitetura conectável (plugins / extensões).

Venho estudando quais plataformas têm as melhores comunidades de plug-in ...

Excelente Plugin Arquiteturas com prósperas comunidades de plugin:

Depois, há plataformas com as comunidades de plugin menos ativos:

(Por uma questão de foco, vamos deixar de lado ou ignorar plataformas que permitem que aplicativos de software de pleno direito, como o Microsoft Windows, iPhone e Facebook.)

O que você diria dá uma plataforma de software uma arquitetura de plug-in bem sucedido com lotes de plugins, contra outra plataforma com uma comunidade de desenvolvedores menor ou inativo?

Apenas Para começar, aqui está uma lista parcial:

  • A plataforma faz algo de grande utilidade:. Povo deixou-nos navegar na web, comprar e coisas vender, publicar blogs e fóruns, etc
  • A plataforma é open source (ou, no mínimo, o código fonte está disponível livremente).
  • Todas as funções importantes na plataforma são totalmente plugabble através de ganchos e filtros.
  • Tudo ou a maioria das funções conectáveis ??estão bem documentados (ou há um wiki para que desenvolvedores possam documentar isso para você).
  • Há uma lista de fórum ou e-mail onde os desenvolvedores podem compartilhar plugins, e compartilhar dicas e truques
  • Há um fórum ou e-mail lista onde os usuários menos sofisticados podem obter ajuda para instalar e configurar os plugins.

Que tipo de coisas pode um desenvolvedor de plataforma de fazer para criar uma arquitetura conectável que incentiva muitos desenvolvedores externos para criar plugins?

Foi útil?

Solução

Pessoalmente há 3 principais contribuintes para se eu aprender a (e fazer) Faça para qualquer dado sistema:

O sistema muito útil para que eu gostaria de usá-lo o suficiente para ser bastante motivado para estendê-lo?

O sistema está usando uma linguagem que eu estou familiarizado com, ou é fácil de aprender em oposição a alguma solução obscura ou proprietárias ou de outra forma excessivamente complicado (ver elisp)?

O sistema de plugins extremamente bem documentados em linguagem clara para que eu possa ir sobre o trabalho de escrever meu plugin e não passar horas (ou dias) decifrar o sistema?

Se estas coisas são todas verdadeiras, a única razão que você não gostaria de desenvolver para uma plataforma é que alguém já plugins escrito para todas as suas idéias. :)

Eu acho que é também extremamente útil / importante ter um repositório central e bem conhecido para casa contribuiu usuário plugins (como por seus projetos de exemplo). Eu odeio ter que vasculhar a web para encontrar, possivelmente baixa qualidade individual ou add-ons possivelmente até mesmo maliciosos por algo que eu estou tentando fazer. Este deve ser um site ou wiki como até mesmo fóruns ou listas de discussão pode ser chato e demorado para vasculhar.

Outras dicas

Você está perdendo o ponto.

A JVM é uma arquitetura conectável. A cada fichas de arquivo de classe para ele e estende-lo.

O Apache é uma arquitetura conectável a vários níveis. Há os "mods". Alguns mods executar outros intérpretes, que são eles próprios arquiteturas conectáveis. PHP, mod_wsgi / Python, etc, tudo está conectado a Apache.

Python é uma arquitetura conectável com arquivos Python .pyc e arquivos objeto (de DLL, de .SO) que se conectam a ele.

Cada quadro linguagem é - na verdade -. Uma arquitetura conectável

A Plataforma é uma Fundação

Uma vista de uma plataforma de software é como um alicerce sobre o qual outro software se baseia em ordem para executar outra tarefa. Isso pode costurar um simples e declaração bastante óbvio, mas é um passo importante.

O básico deve ser fácil

A plataforma deve ter um propósito e desenvolvedores da plataforma deve estar ciente disto ao projetar APIs de modo que torna-se óbvio que os casos de uso primarry são e as APIs em torno deles deve ser feito tão straightford possível para usar no que diz respeito à maneira eles são projetados, mas também em relação ao doccumentation em torno deles.

Pontos de Extensão deveria ser óbvio

extensibilidade em um platoform é sobre o fornecimento aos desenvolvedores a oppotunity para estender ou mudar a plataforma. Se isso é algo que você quer incentivar, então você precisa deixar bem claro a natureza e limitações desta extensibilidade e fornecer um conjunto bem definido de interfaces para permitir isso.

Isso tudo pode parecer óbvio, mas se você quiser uma comunidade para desenvolver em torno de uma plataforma, a plataforma deve ter um uso e estendê-lo deve ser uma experiência simples.

Desculpe se isso costuras um pouco "astronaught achitectural", eu acho que eu fiz alguns pontos válidos, eu pode muito bem tê-los feito mal, sinta-se livre para apontar isso ou adicionar-lhes

Não se esqueça Eclipse (com > 1000 3rd party "plugins" registrados (na verdade, eles são feitos de plugins ainda menores na terminologia Eclipse)). Parte do seu sucesso pode vir de que há boas regras de ouro sobre como projetar um plugin que também é extensível por outros. Há também uma API estrita política (que, naturalmente, tem suas desvantagens, também) de versão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top