2009-05-19 9 views
7

私は、外部の開発者がプラグイン可能なアーキテクチャ(プラグイン/拡張機能)でコードに貢献できるようにするソフトウェアプラットフォームが増えていることに本当に感心しています。私は、プラットフォームが最良のプラグインコミュニティを持っている研究してきたソフトウェアプラットフォームを設計する場合、プラガブルアーキテクチャを成功させる重要な要素は何ですか?

...

盛んなプラグインコミュニティと

優秀なプラグインアーキテクチャ:ブログ用

  • ワードプレス(およびWordPressのマルチユーザー):4245 plugins
  • メッセージボード用bbPress:165 plugins
  • ブラウザ用Firefox:1265 extensions
  • 電子商取引のためのMagentoの:

    • ウィキのためのメディアウィキ:732 plugins

    そして低活性プラグインコミュニティとプラットフォームある22-38 extensions?

(焦点性のためには、 Microsoft Windows、iPhone、Facebookなどの本格的なソフトウェアアプリを可能にするプラットフォームを脇に置いたり、無視してみましょう。

あなたは、ソフトウェア・プラットフォームに多数のプラグインを含む成功したプラグイン・アーキテクチャーと、より小さいまたは非アクティブな開発者コミュニティーを持つ別のプラットフォームとを比較するとどうでしょうか?

は物事を始めるために、ここでの部分的なリストです:

  • プラットフォームが広く有用何かをする:しましょう人々が
  • など、ウェブを閲覧ものを購入し、販売し、ブログや掲示板を公開しますプラットフォームはオープンソースです(または、少なくともソースコードは自由に利用できます)。
  • プラットフォームのすべての重要な機能は、フックとフィルタを介して完全にプラグラブルです。
  • プラグ可能な関数のすべてまたはほとんどが文書化されています(または、開発者がそれを文書化できるようにwikiがあります)。
  • 開発者がプラグインを共有してヒントやヒントを共有できるフォーラムやメールリストがあります
  • プラグインのインストールと設定については、あまり洗練されていないユーザーが参考になるフォーラムやメールリストがあります。

多くの外部開発者がプラグインを作成することを奨励するプラガブルアーキテクチャを作成するために、プラットフォーム開発者はどのようなことができますか?個人的に私は学ぶ(とやる)かどうかの3つの主要な貢献者があります

答えて

1

任意のシステムのためのアプリケーションを書くには:私は十分に拡張するために動機づけられるのに十分な、それを使用したいと思いますように

は非常に便利なシステムですそれ?

私は慣れ親しんだ言語を使用していますか、あまり知られていない、または独自の、あるいはそれほど複雑ではないソリューション(elispを参照)とは対照的に、習得が容易ですか?

プラグインシステムは明確な言語で文書化されているため、プラグインを作成してシステムを解読する時間(または日)を費やさないようにすることができますか?

これらのことがすべて真実である場合、プラットフォームのために開発したくない唯一の理由は、他の誰かがあなたのすべてのアイデア用のプラグインをすでに書いているということだけです。 :)

私は、(あなたのサンプルプロジェクトのように)ユーザーが投稿したプラグインを格納するための中心的かつよく知られたリポジトリを持つことも非常に有益/重要だと思います。私は、個人的な、おそらく低品質の、あるいはおそらく悪質なアドオンを私がやろうとしているものに見つけるためにウェブを捜す必要はありません。これはウェブサイトまたはwikiであっても、フォーラムやメーリングリストのアーカイブでさえも掘り下げて掘り下げることができます。

+0

@jessコミュニティについての良い点は、私が簡単に見つけられないソフトウェア(プラグイン)です。私はFirefoxを使用しない理由の一つですが、良いプラグインを探すために時間を費やしたくありません。 – Crippledsmurf

1

あなたはポイントがありません。

JVMはプラッガブルなアーキテクチャです。すべてのクラスファイルがプラグインされ、拡張されます。

Apacheは、いくつかのレベルでプラグイン可能なアーキテクチャです。 「改造」があります。いくつかの改造者は、それ自体がプラガブルなアーキテクチャである他のインタープリタを実行します。 PHP、mod_wsgi/PythonなどはすべてApacheにプラグインされています。

Pythonは、Pythonの.pycファイルとそれに接続するオブジェクトファイル(.DLL、.SO's)を持つプラグイン可能なアーキテクチャです。

すべての言語フレームワークは実質的にプラグイン可能なアーキテクチャです。

+0

プログラミング言語やVM自体ではなく、プラットフォームとしてのソフトウェアアプリケーションについて質問していました。 – jess

+0

JVMアプリケーションと他のアプリケーションの違いはわかりません。それはアプリです。それは差し替え可能です。 Python VMは他のアプリケーションに組み込むことができるので、どこに線を引くことができるのかは完全にはわかりません。おそらく、定義を使って質問を更新することができます。 –

+0

@S Lottこれは私が考えている、私はあなたがここで提起するコンセプトとある程度合意したと思う。言語をプラットフォームとし、言語そのものをプラットフォームとのやりとりに使うツールと見なす傾向があります。 .NETはプラットフォームであり、サポートされている.net言語で対話することができるBCLを提供しています – Crippledsmurf

1

プラットフォームソフトウェアプラットフォームの基礎

つのビューは、他のソフトウェアが別のタスクを実行するために依拠する基礎としてです。これは、シンプルではっきりとした陳述を継ぎ手にするかもしれませんが、それは重要なものです。

の基礎は、それがprimarryユースケースがあり、それらの周りのAPIがどうあるべきか明らかになるように、目的とプラットフォームの開発者は、この設計のAPIを認識しておく必要があり

プラットフォームを持っている必要があります簡単にする必要があります彼らがデザインされている方法だけでなく、それらのまわりのドキュメンテーションに関しても、可能な限りストレートフォードとして作られています。

拡張ポイントはplatoformで

拡張性を開発者にプラットフォームを拡張または変更するoppotunityを提供についてです明らかです。これが奨励したいものであれば、この拡張性の性質と限界を非常に明確にし、これを可能にする明確なインタフェースセットを提供する必要があります。

これはすべて明らかなことかもしれませんが、コミュニティをプラットフォームの周りに展開したい場合は、そのプラットフォームには使い道があり、それを拡張することは単純な経験でなければなりません。これはちょっと「achitectural astronaughtを」縫い目場合

申し訳ありませんが、私はいくつかの有効なポイントを作ったと思いますか、私にはよく彼らが悪い、忘れてはいけない、これを指摘したり、それらに

0

を追加すること自由に感じてきたことEclipse>1000 registered 3rd party "plugins"(実際には、Eclipseの用語ではより小さなプラグインで構成されています))。その成功の一部は、他の人によっても拡張可能なプラグインを設計する方法に関する経験則があることから来るかもしれません。厳密なAPIバージョン管理ポリシーもあります(もちろん、欠点もあります)。

関連する問題