ソフトウェア プラットフォームを設計するとき、成功するプラガブル アーキテクチャを構成する重要な要素は何ですか?
-
22-08-2019 - |
質問
私は、プラグイン可能なアーキテクチャ (プラグイン/拡張機能) を通じて外部の開発者がコードに貢献できるソフトウェア プラットフォームの数が増えていることに本当に感銘を受けました。
私はどのプラットフォームに最高のプラグイン コミュニティがあるかを研究しています...
活発なプラグイン コミュニティを備えた優れたプラグイン アーキテクチャ:
- ブログ用の WordPress (および WordPress MultiUser): 4245 プラグイン
- 掲示板については bbPress: 165 個のプラグイン
- Firefox のブラウザ: 1265 拡張子
- 電子商取引用の Magento: 732 個のプラグイン
次に、プラグイン コミュニティがあまり活発でないプラットフォームもあります。
- ウィキ用の MediaWiki: 延長22~38?
(焦点を絞るため、Microsoft Windows、iPhone、Facebook などの本格的なソフトウェア アプリを可能にするプラットフォームは脇に置くか無視しましょう。)
ソフトウェア プラットフォームが、多数のプラグインを備えたプラグイン アーキテクチャを成功させるのは、開発者コミュニティが小規模または非アクティブな別のプラットフォームと比較して、どうなると思いますか?
まずは、部分的なリストを以下に示します。
- このプラットフォームは、広く役立つことを行います。ウェブを閲覧したり、物を売買したり、ブログや掲示板を公開したりしましょう。
- プラットフォームはオープンソースです (少なくとも、ソース コードは自由に入手できます)。
- プラットフォーム内のすべての重要な機能は、フックとフィルターを通じて完全にプラグイン可能です。
- プラグ可能な関数のすべてまたはほとんどが詳しく文書化されています (または、開発者が文書化できる Wiki もあります)。
- 開発者がプラグインを共有したり、ヒントやコツを共有したりできるフォーラムやメール リストがあります。
- あまり知識のないユーザーでもプラグインのインストールと設定に関するヘルプが得られるフォーラムまたは電子メール リストがあります。
多くの外部開発者にプラグインの作成を促すプラグイン可能なアーキテクチャを作成するために、プラットフォーム開発者はどのようなことができるでしょうか?
解決
個人的に私は学ぶ(とやる)かどうかの3つの主要な貢献者があります任意のシステム用のアプリケーションを記述します:
私はそれを拡張するのに十分な動機づけられるのに十分な、それを使用したいと思いますように非常に便利なシステムですか?
(elispのを参照してください)私は精通していた言語を使用したシステムであり、あるいはいくつかのあいまいまたは所有権あるいは過度に複雑ソリューションにとして反対学びやすいのですか?
私はシステムを解読私のプラグインを書くと時間(または日)を費やしていないの作業に取り掛かることができるように非常によく明確な言語で文書プラグインシステムですか?
これらのものはすべて該当する場合は、、あなたはプラットフォームのために開発したいではないでしょう唯一の理由は、他の誰かがすでにすべてのあなたのアイデア用のプラグインを書いていることです。 :)
私はそれは(あなたの例のプロジェクトごとに)プラグインを寄付したユーザを収容するための中心、よく知られているリポジトリを持っていることも重要/非常に便利だと思います。私は私がやろうとしている何かのための個々の、おそらく低品質、あるいはおそらく悪質なアドオンを見つけるためにウェブを磨くする必要が嫌い。これは、も、フォーラムやメーリングリストのアーカイブを通じ掘るために迷惑と時間がかかる可能性がウェブサイトやウィキでなければなりません。
他のヒント
あなたはポイントを逃しています。
JVMは、プラグイン可能なアーキテクチャです。すべてのクラスファイルがそれにプラグインし、それを拡張します。
Apacheはいくつかのレベルでのプラグイン可能なアーキテクチャです。 「改造」があります。いくつかの改造自体プラグイン可能なアーキテクチャです他の通訳を、実行します。などPHP、mod_wsgiの/ Pythonの、すべてのApacheに差し込まれています。
PythonはそれにプラグインのPythonに.pycファイルとオブジェクトファイル(.DLLの、.SO者)とプラグイン可能なアーキテクチャである。
すべての言語のフレームワークがある - 実際に - プラグイン可能なアーキテクチャ
。プラットフォームは基盤です
ソフトウェア プラットフォームの 1 つの見方は、他のソフトウェアが別のタスクを実行するために依存する基盤としてのものです。これは単純でかなり明白なステートメントかもしれませんが、重要なステートメントです。
基本は簡単であるべきです
プラットフォームには目的が必要であり、プラットフォーム開発者は API を設計するときにこれを認識して、主要なユースケースが何であるかを明確にし、その周辺の API をその設計方法に関してできるだけ簡単に使用できるようにする必要があります。だけでなく、関連する文書に関しても同様です。
拡張ポイントは明らかである必要があります
プラットフォームの拡張性とは、開発者にプラットフォームを拡張または変更する機会を提供することです。これを奨励したい場合は、この拡張性の性質と制限を明確にし、これを可能にする明確に定義されたインターフェイスのセットを提供する必要があります。
これはすべて明白に聞こえるかもしれませんが、プラットフォームを中心にコミュニティを開発したい場合、そのプラットフォームには用途があり、その拡張は簡単な経験でなければなりません。
これが少し「建築上の宇宙飛行士」のようなものだったら申し訳ありませんが、私はいくつかの有効な点を指摘したと思いますが、私の指摘が不十分だった可能性もあります。遠慮なく指摘したり追加したりしてください。
忘れないで 日食 (と >1000 件のサードパーティ「プラグイン」が登録されています (実際、これらは Eclipse 用語ではさらに小さなプラグインで構成されています))。その成功の一部は、他の人によっても拡張可能なプラグインを設計する方法に関する適切な経験則があることに起因している可能性があります。厳格な API バージョン管理ポリシーもあります (もちろん、これには欠点もあります)。