11

Java のような強く型付けされた静的言語の場合、IoC / DI フレームワーク / ツールキットは、複雑なシステムを切り離してサブコンポーネントの単体テストを可能にし、それらの構成を流暢に行うために非常に重要です。

私たちのほとんどは、ゆるく型付けされた動的言語としての Javascript が、精神的に IoC / DI の主な利点をすでに提供していると述べていますが、一部の人は、より高いレベルの抽象化 / 実装が必要であると主張しています。

後者の場合、Javascript 領域での一般的な IoC / DI 実装は何ですか?

4

3 に答える 3

3

wire.jsをご覧ください。これは私の選択であり、うまく機能します。

主な機能は次のとおりです。

  • シンプルで宣言的な依存性注入
  • 柔軟で非侵襲的な接続インフラストラクチャ
  • アプリケーションのライフサイクル管理
  • 一般的なフレームワークと既存のコードを統合するための強力なコア ツールとプラグイン アーキテクチャ。
  • ブラウザ環境とサーバー環境の両方をサポート

また、DIのいくつかの代替npmモジュールを確認してください

于 2013-03-11T21:25:26.463 に答える
2

Javascript のダックタイピングにより、依存関係を簡単にモックできます。

これを行う方法の簡単な例を次に示します。

データベースに追加される項目を表す単純な関数があります。DB は、モックしたい依存関係です。

function SaveItem(item){

    var db = new DB();

    db.insert(item);

};

DB 依存関係をパラメーターに変更すると、必要なものを何でも注入できます。関数が呼び出されると、dataStore パラメータが存在するかどうかがチェックされます。アイテムが存在する場合、値は db に割り当てられます。dataStore が null または未定義の場合、代わりに新しい DB オブジェクトが作成されます。これにより、db が常に値を持つという確信を持って依存関係を注入できます。

function SaveItem(item, dataStore){

    var db = dataStore || new DB();

    db.insert(item);

};

これで、次のように依存関係をモックできます。

function mockDb(){

    return{
        insert: function(){ 
            assert(true);  
        }
    }

};

そして、テストですべてをまとめるには:

function SaveItemShouldCallInsertOnDb = function(){

    var testDb = new mockDb();
    var someTestItem = { name: "test item" };

    SaveItem(someTestItem, testDb);
};
于 2013-03-11T21:38:22.890 に答える
-1

Angular.js は、優れた IMO である依存関係管理の実装を提供します。しかし、Angular は単なる DI コンテナーではありません。そのため、アプリをゼロから Angular にする必要があります。ただし、特にフォームベースの操作が多い場合は、試してみる価値があります。

于 2013-03-11T21:33:16.340 に答える