遅かれ早かれ、他の開発者の抽象化を使用する必要があります。つまり、他の人のコードに依存することになります。依存関係のない (依存関係のない) モジュールが望ましいですが、それを実現するのは困難です。あなたが作成する素晴らしいブラック ボックス コンポーネントであっても、多かれ少なかれ何かに依存しています。ここで依存性注入が登場します。依存関係を効果的に管理する機能は、今や絶対的に必要なものになっています。この記事では、この問題についての私の調査とその解決策のいくつかを要約します。
1. 目標
2 つのモジュールがあると想像してください。 1 つ目は Ajax リクエスト サービス (サービス) を担当し、2 つ目はルーティング (ルーター) を担当します。
これを行うのに役立つツールが必要です。これは依存関係注入が解決しようとしている問題です。依存関係注入ソリューションが達成すべき目標をいくつか書き留めてみましょう:
依存関係を登録できるはずです
1. インジェクションは関数を受け取り、必要な関数を返す必要があります
2. あまり多くを書くことはできません - 合理化された美しい構文が必要です
3 .インジェクションは渡された関数のスコープを維持する必要があります
4. 渡された関数は依存関係の説明だけでなくカスタムパラメータを受け入れることができる必要があります
5. これは完璧なチェックリストです。
3. RequireJS/AMD メソッド
RequireJS について聞いたことがあるかもしれませんが、これは依存関係の注入を解決するための良い選択です。
}
}
しかし、このアプローチは完璧ではなく、反射型注射では非常に大きな問題となります。圧縮するとパラメーター名が変更され、正しいマッピングを維持できなくなるため、ロジックが壊れます。たとえば、 doSometing() は圧縮すると次のようになります:
var doSomething = injector.resolve(['service', 'router', function(service, router) {
}]);
5. スコープを直接注入する
操作関数 (つまり this オブジェクト) のスコープに関係する 3 番目の注入変数を使用することがあります。したがって、多くの場合、この変数を使用する必要はありません。