.NETでの依存性注入



原題: .NETでの依存性注入

投稿者 Mark Siman

リリース日: 2013年8月



夏の終わりには、Manning Publicationsが発行した新しい翻訳本、 .NETのDependency Injectionがあります 。 小さな発表の翻訳を提出してください。



.NETのDependency Injectionは、Dependency Injection(DI)テクノロジ、その関連パターン、およびそのような実装のいくつかの重要なフレームワークの優れた説明です。 Simanは多くのリソース(書籍、雑誌記事、ブログ投稿)に取り組み、包括的な作品を作成しました。 間違いなく、著者は、独立して実施された多くの研究と、依存性注入の操作における彼自身の実際的な経験に依存しています。



この本は私の手に非常に重宝しました。 数か月前、私はPrismを使用してWPFプロジェクトに取り組み始めました。 以前同僚と一緒に仕事をしていた同僚の1人がこの本を強く勧めてくれたので、コピーを購入しました。 (実際、私は単なる「ブックキーパー」であり、本から学ぶのが最も簡単です。他の人は異なる方法で勉強しますが、このレビューはブックキーパーの観点から書かれています。



パート1



パート1は、依存性注入テクノロジーの概要です。 Simanは、そのような操作が何であるか(「インジェクション」と呼ばれる)について話し、またそれらに関連する誤解のいくつかを暴きます。 著者は、依存性注入のメリット、特にコードの遅延バインディング、拡張性、並行開発、サポート、およびテスト容易性について話しています。 著者はまた、依存関係の実際の使用の基礎を築き、依存関係の注入を実装する良い例と悪い例を示し、そのような各オプションが目標の達成にどのように影響するかを示します。 最後に、彼は本でカバーされる他のトピックを紹介し、特に設計パターン、依存性注入機能、および依存性注入に利用可能なコンテナに言及します。



パート2



パート2では、依存性注入のパターンとアンチパターンについて説明します。 パターンには、コンストラクター注入、プロパティ注入、メソッド注入、および周囲のコンテキストが含まれます。 Simanはこれらのパターンを非常に賢明に説明し、その長所と短所の両方について語っています。 作成者はできるだけ頻繁にコンストラクター注入を使用することを好み、コンストラクター注入を実行できない場合にのみ他のパターンを参照することがすぐに明らかになります。 (私は最近、依存関係の注入に取り組んでいますが、同じ原則に従うことにしたことに注意したいと思います)。



アンチパターンには、独裁者、ハイブリッドインジェクション、リミテッドデザイン、サービスロケーターが含まれます。 作成者がサービスロケーターをアンチパターンとしてランク付けするという事実は、最も議論の余地があります。 ほとんどの専門家は、Service Locatorは完全に受け入れ可能な依存関係注入パターン(アンチパターンではなく)であると考えています。 Siman自身は長年にわたってService Locatorを擁護していたことを認めていますが、結局、Service Locatorの欠点はその利点を上回るという結論に達しました。 Prismプロジェクト(これはMicrosoft複合アプリケーションを作成するためのテンプレートです)には、組み込みのService Locatorがあります。 現在、Prismを使用してチームで作業しています。 私たちは時々Service Locatorを使用していますが、その長所と短所については直接知っています。 この段階では、いくつかの不利な点はありますが、有利な点よりも有利であると言えます。



パート2には、依存性注入のリファクタリングに関する章もあります。 これは、実際に発生する可能性のある依存関係注入を含む状況の非常に実用的な概要です。 たとえば、周期的および短期的な依存関係の処理が考慮されます。 これらは本当に重要なトピックです。 通常作業する必要がある依存性注入コンテナーは、抽象化の追加レイヤーを追加するため、潜在的な問題を忘れることがあります(コンテナーがコンテナー自体を処理すると仮定します)。



パート3





パート3では、依存性注入に関連する他の主要なトピック(オブジェクトの構成、オブジェクトの寿命、インターセプト)について説明します。 オブジェクトの構成により、オブジェクトの作成時に依存性注入がどのように適用されるかが決まります。 Simanは、コンソールおよびWPFアプリケーションでの単純な実装から、ASP.NETおよびPowerShell起動コマンド(コマンドレット)の使用に関連するかなり複雑なオプションまで、オブジェクトを作成するさまざまな例を示します。



オブジェクトの寿命によって、依存関係管理の進め方が決まります。 どの要素を要求していても(Loner)、常に依存関係の同じインスタンスを返しますか? または、常に依存関係の新しいインスタンスを返しますか(短期スタイル)? または、何らかの妥協アプローチを選択しますか? Simanは、各オプションの寿命、長所、短所についてさまざまなオプションを検討しています。 他の場合と同様に、特定の状況に応じて行動し、解決する問題のコンテキストで回答を選択する必要があります。



最後に、Simanは傍受の問題に対処します。 このアイデアは、コンテナを使用して依存関係を注入し、アプリケーションにエンドツーエンドの機能を実装することです。 たとえば、コンテナ内の各依存関係をプログラミングして、ロギング機能を実装したり、エラーを処理したりできます。 これは非常に興味深いトピックです。 また、著者はアスペクト指向プログラミング(AOP)に触れ、同じ問題を解決しながら、例の依存関係の実装と比較します。



パート4





パート4では、依存性注入のいくつかのコンテナーについて説明します。 この部分では、すべての章でSim​​anが一貫して同じ例を使用していることを特に気に入っています。 したがって、彼は例自体ではなく、特定のコンテナーの実装の違いに焦点を当てています。



おわりに





.NETのDependency Injectionは素晴らしいチュートリアルです。 市場にはこのトピックに関する本があまりありませんので、そのような質の高い研究をする方がずっと楽しいです。 依存性注入テクノロジーの使用を完全にマスターしたいすべての開発者にこの本をお勧めします。



All Articles