web-dev-qa-db-ja.com

Javascriptライブラリの場合、拡張性をサポートするための最良または標準的な方法は何ですか

具体的には、ライブラリの一部の動作を変更する「プラグイン」をサポートしたいと思います。

私はこの主題についてウェブ上で多くの情報を見つけることができませんでした。しかし、ライブラリを拡張する方法についての私の考えは次のとおりです。

  1. ライブラリは、パブリック関数と「保護された」関数の両方を備えたオブジェクトをエクスポートします。プラグインはこれらの関数のいずれかを置き換えることができるため、ライブラリの動作を変更できます。この方法の利点は、シンプルであり、プラグインの関数がライブラリの「保護された」関数に完全にアクセスできることです。欠点は、公開された関数のセットが多いとライブラリの保守が難しくなり、複数のプラグインが関係している場合はデバッグが困難になる可能性があることです(どのプラグインがどの関数を変更したかを知る方法は?)。

  2. ライブラリは、特定のインターフェイスを持つオブジェクトを受け入れる「プラグインの追加」機能を提供します。内部的には、ライブラリは、必要に応じて、独自のコードの代わりにプラグインを使用します。この方法では、同じプラグインインターフェイスをサポートしている限り、ライブラリの内部をより自由に再配置できます。これは、ライブラリのさまざまな部分を変更するためのさまざまなプラグインインターフェイスを持つこともサポートできます。この方法の欠点は、ライブラリの内部関数がエクスポートされないため、プラグインがすでにライブラリの一部であるコードを再実装しなければならない可能性があることです。

  3. ライブラリは、特定の基本オブジェクトから継承されたオブジェクトを受け入れる「実装の設定」関数を提供します。ライブラリのパブリックAPIは、変更可能な機能の実装オブジェクト内の関数を呼び出します。基本実装オブジェクトには、外部(APIの)関数と内部関数の両方を含むコア機能が含まれます。プラグインは、ベースオブジェクトから継承し、変更する関数を置き換える新しい実装オブジェクトを作成します。これは、他の両方の方法の長所と短所を組み合わせたものです。

4
Michael Best

私にとって、拡張性とはInterchangable_Partsを意味します。

大まかに言うと、時間の経過とともに拡張可能になるには、一部のコードを追加し、一部のコードを削除する必要があります。拡張性は、時間の経過とともに、追加、再利用、交換を実現するための簡単なシステムです。

拡張可能なシステムを設計するための基本的な前提条件は、高度な方法論の知識にあります。幸いなことに、多くはJavaScriptで十分に文書化されています。

あなたが何をしようとしているのかについての特定の知識がなければ…。

ここに短いリストがあります:

  1. モジュール-AMD。
  2. デザインパターン-MVC、名前空間。
  3. 疎結合-Pub-Sub/Evented Views、アプリアーキテクチャ。
  4. テンプレート。
  5. データバインディング。

多くの点で、上記のトピックを学ぶ熱意は科学よりも芸術になります。

あなたはしなければならない:

A.多くのオプションを調査するB.多くのテクノロジーのプロトタイプを作成するC.JSpolyglotおよびJSagnosticになる。 D.個人的なイデオロギーに最適なものを適用する場合のFail-Fast。

  • Fail-Fastは、成功のための起業家精神にあふれたテクノロジー企業のモットーに基づいています。これは、進化するソフトウェアを実現するのに役立ちます。ソフトウェアがモジュラーの場合、パーツを個別に改善するように設計します。失敗したモデルにあまり多くの労力を費やしたくはありません。

  • 後で拡張できることがわかっているものをスタブし、繰り返し拡張し続けます。これには、ある程度のビジョンと規律が必要です。

  • 巨人の肩の上に立つ。車輪の再発明を試みて時間を無駄にしないでください。ソーシャルコーディングコミュニティが生成しているものを使用し、それを拡張します。これにより、モジュール化の可能性が最も高くなります。そして、ベストプラクティスのデザインパターンを組み込むための最良のチャンス。

  • プラグインに関して他の人がしていることを見てください。 Paul Irishには、「jQueryソースコードを読んで学んだ10のこと」に関する有名なドキュメントがいくつかあります。プラグインを作成したい場合は、これも行う必要があります。また、ExtJSとYUIも、慎重に判断して検討する必要があります。利益は不可知論者であることから生じます。それぞれがあなたのニーズを支援することができる異なる方法論を使用しています。

  • モジュラーアーキテクチャ。これがすべての柔軟性の基礎です。私が言語を超えて見た最大の課題は、抽象化されたオブジェクトを分離することですが、それでもそれらが通信できるようにすることです。基本的に、これは重要なトレードオフです。

関心の分離に推奨されるテクノロジーは次のとおりです。

require.js、backbone.js、underscore.js、GitHub。

簡単に千以上あります。しかし、1つのポイントがある場合は、AMDとrequire.jsを確認することです。多くの人が、これがモジュラーJSの未来だと言います。

うまくいけば、正しい方向に検索するためのいくつかの用語がここにドロップされます。ではごきげんよう!ナッシュ

2
Jack Stone

これは、次の投稿に似た興味深いトピックです- プラグインを介してjavascriptライブラリを拡張する方法は? 。投稿があなたの質問に答えることを願っています。

物を隠すために クロージャ を見ることもお勧めします。

3
Yusubov