柔軟なプラグインアーキテクチャを作成するには? [closed] 質問する

柔軟なプラグインアーキテクチャを作成するには? [closed] 質問する

私の開発作業で繰り返し登場するテーマは、社内プラグイン アーキテクチャの使用または作成です。構成ファイル (XML、.conf など)、継承フレームワーク、データベース情報、ライブラリなど、さまざまな方法でアプローチしてきました。私の経験では、次のようになります。

  • データベースは、特にデータと混在する設定情報を保存するのに最適な場所ではありません。
  • 継承階層でこれを試みるには、コード化するプラグインについての知識が必要であり、プラグインのアーキテクチャはそれほど動的ではないことを意味する。
  • 設定ファイルは単純な情報を提供するのには適していますが、より複雑な動作を処理することはできません。
  • ライブラリはうまく機能しているように見えますが、一方向の依存関係は慎重に作成する必要があります。

これまで取り組んできたさまざまなアーキテクチャから学ぼうと努めると同時に、コミュニティからの提案も求めています。SOLID プラグイン アーキテクチャをどのように実装しましたか? これまでで最悪の失敗 (またはこれまで見た最悪の失敗) は何ですか? 新しいプラグイン アーキテクチャを実装するとしたらどうしますか? これまで取り組んだ SDK またはオープン ソース プロジェクトの中で、優れたアーキテクチャの最良の例となっているものは何ですか?

私が独自に見つけたいくつかの例:

これらの例は、さまざまな言語の長所を生かしているようです。優れたプラグイン アーキテクチャは、必ず言語に結び付けられているのでしょうか? プラグイン アーキテクチャを作成するには、ツールを使用するのがベストでしょうか、それともモデルに従って独自に行うのがベストでしょうか?

ベストアンサー1

これは答え潜在的に役に立つコメントや例がたくさんあります。

  • アプリケーションを拡張可能にする効果的な方法の 1 つは、その内部をスクリプト言語として公開し、すべてのトップレベルのものをその言語で記述することです。これにより、アプリケーションは変更しやすくなり、実質的に将来性も確保されます (プリミティブが適切に選択され、実装されている場合)。この種の成功例は Emacs です。私は、機能を拡張したい場合、API を学習して別のプラグインを記述/コンパイルする必要がないため、Eclipse スタイルのプラグイン システムよりも Emacs を好みます。現在のバッファー自体に 3 行のスニペットを記述し、評価して使用できます。非常にスムーズな学習曲線と非常に満足のいく結果です。

  • 私が少し拡張したアプリケーションの一つはトラックコンポーネント アーキテクチャを採用しており、この状況では、タスクは拡張ポイントをアドバタイズするモジュールに委任されます。その後、これらのポイントに適合する他のコンポーネントを実装して、フローを変更できます。これは、上記の Kalkie の提案に少し似ています。

  • もう一つ良いのはpy.テストこれは「最高の API は API がないことである」という哲学に従い、すべてのレベルで呼び出されるフックに完全に依存しています。規則に従って命名されたファイル/関数でこれらのフックをオーバーライドし、動作を変更できます。サイト上のプラグインのリストを見て、それらをどれだけ迅速かつ簡単に実装できるかを確認できます。

一般的なポイントをいくつか挙げます。

  • 拡張不可能な、またはユーザーが変更できないコアをできるだけ小さく保つようにしてください。拡張性を高めるために、できる限りすべてを上位レイヤーに委任します。誤った選択をした場合にコアで修正する部分が少なくなります。
  • 上記の点に関連して、プロジェクトの方向性について最初からあまり多くの決定を下すべきではないということです。必要な最小限のサブセットを実装してから、プラグインの作成を開始してください。
  • スクリプト言語を埋め込む場合は、おもちゃの言語ではなく、一般的なプログラムを記述できる完全な言語であることを確認してください。ただあなたのアプリケーションのために。
  • できる限り定型文を減らしてください。サブクラス化、複雑なAPI、プラグインの登録などに煩わされないでください。シンプルにしておくことで、簡単そして、可能拡張します。これにより、プラグインAPIがより多く使用されるようになり、エンドユーザーがプラグインを作成するようになります。プラグイン開発者だけではありません。py.testはこれをうまく実行します。私の知る限り、Eclipseはではない

おすすめ記事