2009-05-19 8 views
7

Sono stato davvero colpito dal numero crescente di piattaforme software che consentono agli sviluppatori esterni di contribuire al codice tramite un'architettura collegabile (plug-in/estensioni).Quando si progetta una piattaforma software, quali sono gli elementi chiave che costituiscono un'architettura collegabile di successo?

Ho studiato quali piattaforme hanno le migliori comunità di plugin ...

eccellenti architetture plugin con le comunità di plugin fiorenti:

Poi ci sono le piattaforme con le comunità dei plugin meno attivi:

(Per il bene di messa a fuoco, mettiamo da parte o ignoriamo le piattaforme che consentono applicazioni software complete, come Microsoft Windows, iPhone e Facebook.)

Che cosa direbbe che una piattaforma software abbia un'architettura di plugin di successo con molti plugin, rispetto a un'altra piattaforma con una community di sviluppatori più piccola o inattiva?

Solo per ottenere le cose iniziate, ecco un elenco parziale:

  • La piattaforma fa qualcosa di ampiamente utile: cerchiamo di persone navigare sul web, comprare e vendere roba, pubblicare blog e bacheche, ecc
  • La piattaforma è open source (o almeno il codice sorgente è disponibile gratuitamente).
  • Tutte le funzioni importanti della piattaforma sono completamente plug-in tramite ganci e filtri.
  • Tutte o quasi tutte le funzioni collegabili sono ben documentate (oppure c'è una wiki in modo che gli sviluppatori possano documentarla per voi).
  • C'è una lista dei forum o e-mail in cui gli sviluppatori possono condividere i plugin, e condividere consigli e trucchi
  • C'è un forum o e-mail lista in cui gli utenti meno sofisticati possono ottenere aiuto Installazione e configurazione del plugin.

Che tipo di cose può fare uno sviluppatore di piattaforme per creare un'architettura collegabile che incoraggia molti sviluppatori esterni a creare plug-in?

risposta

1

Personalmente c'è 3 principali contributori se imparo a (e faccio) scrivere applicazioni per un determinato sistema:

è il sistema molto utile in modo che avrei voluto usare quanto basta per essere motivato abbastanza per estendere vero?

Il sistema utilizza un linguaggio con cui ho familiarità o è facile da apprendere rispetto a soluzioni oscure o proprietarie o comunque eccessivamente complicate (vedere elisp)?

Il sistema di plugin è estremamente ben documentato in un linguaggio chiaro in modo che io possa fare il lavoro di scrivere il mio plugin e non passare ore (o giorni) a decodificare il sistema?

Se queste cose sono tutte vere, l'unica ragione per cui non vorreste sviluppare per una piattaforma è che qualcun altro abbia già scritto dei plugin per tutte le vostre idee. :)

Penso che sia anche estremamente utile/importante disporre di un repository centrale e ben noto per ospitare i plugin degli utenti (come per i progetti di esempio). Odio dover setacciare il web per trovare componenti aggiuntivi individuali, possibilmente di bassa qualità o anche potenzialmente dannosi per qualcosa che sto cercando di fare. Questo dovrebbe essere un sito Web o una wiki, in quanto anche i forum o gli archivi delle mailing list possono essere fastidiosi e richiedono molto tempo per scavare.

+0

@jess Un buon punto sulla comunità, a che serve il software (plug-in) che non riesco a trovare facilmente. Per ironia della sorte, per qualche motivo sono infastidito anche quando c'è una buona comunità, questo è uno dei motivi per cui non uso Firefox, semplicemente non voglio perdere tempo a cercare buoni plugin. – Crippledsmurf

1

Ti manca il punto.

La JVM è un'architettura collegabile. Ogni file di classe si inserisce e lo estende.

Apache è un'architettura collegabile a più livelli. Ci sono le "mod". Alcuni mod gestiscono altri interpreti, che sono anch'essi architetture collegabili. PHP, mod_wsgi/Python, ecc. Sono tutti collegati ad Apache.

Python è un'architettura collegabile con file Python .pyc e file oggetto (.DLL, .SO) che si collegano ad esso.

Ogni framework di linguaggio è - in effetti - un'architettura collegabile.

+0

Avevo l'impressione che stesse chiedendo informazioni sulle applicazioni software come piattaforme, piuttosto che su linguaggi di programmazione o VM stessi. – jess

+0

Non vedo la differenza tra l'applicazione JVM e altre applicazioni. È un'app. È collegabile. Dato che Python VM può essere incorporata in altre app, non mi è chiaro dove si possa tracciare la linea. Forse puoi aggiornare la domanda con una definizione. –

+0

@S Lott Questo mi ha fatto pensare, credo di essere d'accordo in parte con il concetto che hai sollevato qui. Io tendo a vedere la biblioteca attorno a una lingua come piattaforma e il linguaggio stesso come uno strumento utilizzato per interagire con una piattaforma. .NET è la piattaforma, fornisce il BCL con cui ho potuto scegliere di interagire con qualsiasi linguaggio .net supportato – Crippledsmurf

1

La piattaforma è una Fondazione

Una vista di una piattaforma software è una base su cui si basa altro software per eseguire un'altra operazione. Questo può sembrare una dichiarazione semplice e piuttosto ovvia, ma è importante.

Le basi dovrebbe essere facile

Una piattaforma deve avere uno scopo e sviluppatori della piattaforma devono essere consapevoli di questo quando si progettano le API in modo che diventi evidente ciò che i casi d'uso primarry sono e le API intorno a loro dovrebbe essere realizzati il ​​più dritti possibile da utilizzare rispetto al modo in cui sono progettati, ma anche rispetto alla documentazione che li circonda.

punti di estensione dovrebbe essere ovvio

estensibilità in un Platoform è di fornire agli sviluppatori l'oppotunity per estendere o modificare la piattaforma. Se questo è qualcosa che si desidera incoraggiare, è necessario chiarire la natura e i limiti di questa estensibilità e fornire un insieme ben definito di interfacce per consentire ciò.

Questo potrebbe sembrare ovvio, ma se si desidera che una comunità si sviluppi attorno a una piattaforma, tale piattaforma deve essere utilizzata e l'estensione dovrebbe essere un'esperienza semplice.

Scusate se questa cuciture un po ' "astronaught achitectural", penso che ho fatto alcuni punti validi, posso anche aver fatto loro male, si sentono liberi di farlo notare o aggiungere a loro

0

Non dimenticare Eclipse (con >1000 registered 3rd party "plugins" (in realtà sono costituiti da plugin ancora più piccoli nella terminologia di Eclipse)). Parte del suo successo potrebbe derivare dal fatto che ci sono buone regole pratiche su come progettare un plugin che sia anche estensibile da altri. C'è anche una severa politica di versionamento delle API (che ovviamente ha anche i suoi svantaggi).