オブジェクト指向の原則3:依存関係逆転の原則とインタフェース分離の原則

依存関係逆転の原則に基づいたデザインパターン「依存性の注入:Dependency Injection(DIパターン)」の解説及びDIツール「Unity」の実装方法も解説しています。サンプルコードはC#を使って解説しています。

Ratings: 4.66 / 5.00




Description

どうもこんにちは,ピーコックアンダーソンです。

今回は「オブジェクト指向の原則シリーズ」の第3弾として

「依存関係逆転の原則」と「インタフェース分離の原則」を解説しており,

オブジェクト指向の原則3部作の完結編となります。


今回もいろいろと書籍を読み直して,

2つの原則を掘り下げて解説しています。

「依存関係逆転の原則」の方が比重は多めです。

よりよいプログラミングを目指すプログラマーの方にとって,

楽しい内容になっていると思います。


依存関係逆転の原則では,独特な原則ネーミングである

「逆転」とは何を指すのか?という部分を詳しく解説しているので,

このあたりを理解することで,

オブジェクト指向プログラミングをしている実感と自信がつくと思います。


「依存関係が逆転していたらオブジェクト指向プログラミング」

「逆転していなかったら手続き型」と言われるくらい,

オブジェクト指向を理解する上で大事な知識ですので,

理解があいまいな方は,ぜひご覧になってみてください。


依存関係逆転の原則に基づいたデザインパターンである,

「依存性の注入:Dependency Injection」(DIパターン)に関しても説明しており,

外部から依存性を注入することで,「抽象に対してのプログラミング」や

「テスト容易性」を実現する方法を解説しています。


依存関係つながりということで,

プロジェクト間参照に関しても解説しており,

1層構造,2層構造,昔ながらの3層構造,ドメインパターン3層構造の,

それぞれの利点等も解説しています。


インタフェース分離の原則では,

クライアントの要求に合わせたインターフェース分離の方法ということで,

有名な「プリンターの例」と,私独自で考えた「ドラクエの例」を解説しており,

ドラクエの例を見てもらえれば,役割に応じたインタフェースの分離がどういったものかを

理解していただけると思います。


【依存関係逆転の原則】

#01_依存関係逆転の原則

#02_原則違反_上位が下位に依存している例

#03_下位モジュールに依存する事の問題点

#04_両方とも抽象に依存すべきである

#05_両方とも抽象に依存させる実装方法

#06_ファクトリーで下位モジュールを生成する

#07_抽象に依存することで問題が解決されていることを確認する

#08_依存関係逆転という言葉の意味

#09_下位モジュールが抽象に依存する事のメリットとは

#10_抽象と実装の分離_そもそもオブジェクト指向プログラミングというものは

#11_依存性の注入

#12_依存性の注入の実装

#13_自動テストにおける下位モジュールの問題点

#14_自動テストの問題を依存性注入で解決する_Mock手作り

#15_自動テストの問題を依存性注入で解決する

#16_テストケースごとにMockを作るのは大変

#17_Moqを使った自動テストをする方法

#18_メソッドで依存性を注入する方法

#19_ユーザーインタフェースの自動テストをする方法

#20_ViewとViewModelのデータバインド

#21_ViewModelからModuleまでの一連を自動テストする

#22_ViewModelのコンストラクタからファクトリーを呼ぶ実装

#23_DIコンテナツールの使い方

#24_複数の依存性がある場合のDIコンテナの動き

#25_DIコンテナを外部からアクセス可能にする実装方法

#26_プロジェクトの依存関係_1層の場合

#27_プロジェクトの依存関係_2層の場合

#28_プロジェクトの依存関係_昔ながらの3層の場合

#29_プロジェクトの依存関係_ドメインパターン3層構造

#30_依存関係逆転の原則違反の回避方法


【インタフェース分離の原則】

#01_インタフェース分離の原則

#02_プリンターの実装例

#03_ドラクエを題材にしたインタフェース分離の例

#04_キャラクターを操作できるようにする

#05_役割に応じてインタフェースを分離する

#06_ロールとしてのインタフェース

#07_インタフェース分離の原則まとめと5大原則の総括


What You Will Learn!

  • 依存関係逆転の原則の原則が理解できる
  • 依存性の注入パターン(DIパターン)が理解できる
  • DIツールの使い方が理解できる
  • プロジェクト間参照の利点がわかる
  • インタフェース分離の原則が理解できる

Who Should Attend!

  • オブジェクト指向のプログラミングを理解したい方
  • 依存関係逆転の原則を理解したい方
  • 依存性注入(DIパターン)の効果的な使い方を理解したい方
  • インタフェース分離の原則を理解したい方