2013-03-11 12 views
9

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

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

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

答えて

2

wire.jsをご覧ください。これは私の選択であり、それは素晴らしい作品です。

主な機能は次のとおり

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

また、いくつかの選択肢を確認してくださいnpm modules for DI

+0

だけ良いオプションを使用すると、あるアプリケーションを使用している場合AMD互換。 – schlingel

+0

例からは、あなたがIoCでアプリケーションを書く必要があるという印象もありますが、これはちょっとしたIoCの目的を無視しています。私。あなたのコンポーネントは、IoCとは独立しているか、独立している必要があります。例えば。 JavaではPOJOを定義してからIoCを使ってそれらを結びつけることでこれを行います。 – Luke

+1

メインページに簡単な例がないのはなぜですか? DIフレームワークを探している人は通常、すでに利点を知っているので、最も価値のあることは、依存関係を注入し、フレームワークを迅速に比較するための定型コードの測定方法を理解する簡単な例です。HelloWireの例は、ドキュメント: https://github.com/cujojs/wire/blob/master/docs/concepts.md – GameDeveloper

0

Angular.jsはIMO素晴らしいです、依存関係管理の実装を提供します。しかし、Angularは単なるDIコンテナではありませんので、恩恵を受けるためには、アプリケーションは最初からAngularでなければなりません。しかし、特にフォームベースの相互作用が重い場合は、試してみる価値があります。

1

JavascriptのDuck-Typingでは、依存関係を簡単にモックできます。ここで

は、あなたがこれを行うことができる方法の簡単な例です:

私たちは、データベースに追加されている項目を表す単純な機能を持っています。 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); 
}; 
+3

投票のコメント?これは下の投票にはかなり独特の答えのように思える... – BentOnCoding

+0

どうしてdownvote? – Harindaka

+4

DI *フレームワーク*の利点は、実装がアプリケーションやテストレベルで決定され、機能内では決まらないということです。私がサービスBを呼び出しているアプリケーションAを持っていれば...サービスXを使用しています。そして、私がXの作成者で、サービスZが必要な場合は、アプリケーションAの作者はZをスレッディングする責任を負いませんアプリA→B→C ...→X。これはGuiceやSpringのようなDIフレームワークの仕事です。これを行うことができるjavascriptのための同等のフレームワークがありますが、あなたの例はどのように達成可能であるかを示していません。 –

関連する問題