依存関係逆転の原則を.NETアプリケーションに適用する方法

中・大規模なシステムであれば、オブジェクト指向設計開発の大原則のひとつである「依存関係逆転の原則(DIP:Dependency Inversion Principle)」に従ったパッケージ構成にすべきである。Visual Studioであればプロジェクトをひとつのパッケージとしてソリューションを構築する。そして、インターフェイスと実装クラスを分けて、インターフェイスを上位のプロジェクトに含めることで実現できる。

ここでいう上位のプロジェクトとは、ユーザが直接操作する側のパッケージであり、通常は画面などを含むモジュールである。下位のプロジェクトとは、DBアクセスなど低レベルの言語を使ってシステマチックな処理を行う側のモジュールである。ユーザインターフェイス、ビジネスロジック、DBアクセスの論理的な階層に分けてシステムを構築した場合は、ユーザインターフェイスが上位、その下位がビジネスロジック、最下位層にDBアクセスがあるということである。



依存関係逆転の原則に従ったソリューション(VBDIP.zip)と、従わないソリューション(VbNotDIP.zip)を作成した。(ダウンロードページよりダウンロード可能)どちらも、ボタンを押すとDBから生産日を取得して納期日を計算して返すだけの単純なアプリケーションであるが、設計構造が異なる。参照設定でプロジェクトの依存関係を見ると、VbNotDIPソリューションは、上位が下位のプロジェクトを参照している。一方、VbDIPソリューションは下位のプロジェクトが上位のプロジェクトを参照している。

依存関係を逆転させると、モジュールの再利用性や単体テストが行いやすい。単体テストの方法については別の記事を参照していただきたい。

VbDIPは依存関係を逆転させるために、2つの細工が施してある。
ひとつは、インスタンスを作成するときにFactoryパターンを用いていることである。BusinessLogicFactoryクラスおよびDbAccessFactoryクラスが、それぞれビジネスロジッククラス、DBアクセスクラスのインスタンスを作成している。これによって、ユーザインターフェイスとビジネスロジックのプロジェクトは、下位のプロジェクトに依存しなくなる。業務で使える本格的なFactoryパターンのサンプルコードは別の記事を参考にしていただきたい。

もうひとつの細工は、Startupプロジェクトを作成して最初に起動するアプリケーションとすることである。これが必要な理由は、Factoryクラスでインスタンスを生成する際に、モジュールがメモリ上にロードされていなければならないためである。必要になったときにモジュールをロードする方法もあるが、面倒なため最初にロードしている。このためStartupプロジェクトは、すべてのDLLを参照設定に加えてある。

トラックバック

トラックバックURL:
http://www.apricot-jp.com/cgi/mt/mt-tb.cgi/280

関連情報

Copyright(C) 2007 アーキテクト360 Allrights reserved.