特集
|
|
|
●2-3. DIが役立つ場面
その例の1つとして単体テストが挙げられる。
単体テスト時には、実際にデータベースを書き換えたくないといった理由により実装クラスをモック・クラス(=疑似的な動作を行うクラス)に置き換えたい場合がある。そんなとき、Quillは単体テスト時にモック・クラスに切り替える仕組みを持っているので便利だ。
例えば、EmployeeDaoクラスを単体テスト時にMockEmployeeDaoクラスに置き換えたい場合は、IEmployeeDaoインターフェイスにMock属性(Seasar.Quill.Attrs名前空間)を設定してモック・クラスを指定しておき、テスト・コードではQuillInjectorの代わりにMockInjector(Seasar.Quill.Unit名前空間)を使用してDIを行う。その場合のソース・コードは以下のようになる。
なお、テストを記述している以下のEmployeeLogicTestクラスでは、テスティング・フレームワークとしてMbUnitを使用している。テスティング・フレームワークについては各自使い慣れたものを使えばよいが、もしS2Containerを使う場合は、単体テストをサポートするS2Unit.NETが便利だ。S2Unit.NETはMbUnitを拡張してDIコンテナを用いたテストを助けてくれる。
|
|
MockEmployeeDaoクラスのソース・コード(MockEmployeeDao.cs) |
|
|
IEmployeeDaoインターフェイスのソース・コード(IEmployeeDao.cs) |
|
|
EmployeeLogicTestクラスのソース・コード(EmployeeLogicTest.cs) |
ほかにもDIが有効なケースとして、業務アプリケーションの納品先によって少しだけロジックを変えたいというようなことがあるかもしれない。Quillでは標準でそのような機能は持っていないが、Quillは非常にシンプルなソース・コードで作成されているため、カスタマイズが容易である。
例えばImplA属性とImplB属性といった属性を作成しておき、設定ファイルなどの設定値を基に「ImplA属性で指定された実装クラスか」「ImplB属性で指定された実装クラスか」を切り替えるようなInjectorクラスを作成することができる。先ほど出てきたMockInjectorクラスはQuillInjectorのカスタマイズのよいサンプルなので参考にしてほしい。
また、S2Containerを使えば、設定ファイルでDIの設定を行うため、設定ファイルを切り替えることでそのような要件を標準で満たすことができる。
■
以上がS2Container.NETのQuillによるDIの基礎である。引き続き、次回後編ではAOPについての概要を説明する。
INDEX | ||
[特集].NET開発者のためのDI&AOP入門 | ||
Seasar.NETでDIを始めよう | ||
1.DI&AOP開発環境の準備 | ||
2.DIとAOPを理解するためのサンプルの作成 | ||
3.ソース・コードで理解するDI | ||
4.DIが役立つ場面 | ||
コードで簡単に分かる“AOP” | ||
1.ソース・コードで理解するAOP | ||
2.AOPの実践 | ||
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|