「依存性逆転の原則」の版間の差分
削除された内容 追加された内容
m Wikipedia:表記ガイド に従い、文末のピリオドを「。」に統一 |
m Wikipedia:表記ガイドに従い、本文中の敬体 (です・ます) を常体 (である) に修正 |
||
82行目:
=== 家系モジュール ===
ある家系システムでは人々の間の関係を第一レベル関係のグラフとして表現するかもしれ
しかし、上位レベルモジュールでは家系をブラウズするためのより簡単な方法が必要になるかもしれ
家系モジュールの使用法に応じて、共通の関係を明確で直接的な属性として(グラフを隠して)表示することは上位レベルモジュールと家系モジュールの間の結合を遥かに軽くでき、モジュールの使用になんの影響も与えることなく内部表現を完全に変更することを可能に
最終的に、もし最初の一般化された拡張可能なグラフアプローチが一番拡張可能に思えるのであれば、家系モジュールの利用は更に特殊化及び単純化された関係の実装がアプリケーションに対して十分であることを示しているかもしれ
この例でのモジュール間の相互関係の抽象化は下位レベルモジュールのインターフェースの単純化だけでなく、より単純化された実装につながるかもしれ
=== リモートファイルサーバークライアント ===
リモートファイルサーバー(FTP, cloud strage ...)に対するクライアントを実装しなければならないケースを想像
# Connection/Disconnection (a connection persistence layer may be needed)
102行目:
# File history management ...
ローカルファイル、リモートファイルの両方が同じ抽象インターフェースを提供する場合、ローカルファイルと完全に実装された依存性逆転パターンを使用するどんな上位レベルモジュールもローカルとリモートの区別なくファイルにアクセスすることが可能にな
ローカルディスクは一般的にフォルダーを使用し
リモートファイルに対しては、作成と置換のみを行う必要があるかもしれ
ファイル検索は "pluggable" であるかもしれ
概念的なそれぞれのインターフェースに対してリモートファイルサーバーを設計するときは、上位レベルモジュールが要求するサービスのレベル (必ずしも全てが要求されるわけではない)を良く考える必要があ
必要なインターフェースの設計が完了したら、リモートファイルサーバークライアントはこれらのインターフェースを実装すべきで
また、既に存在するローカルファイルに対しての機能 (例えばファイル更新など)について制限を加えたい場合、同じ抽象インタフェースを提供するローカルまたは他の既存のリモートファイルアクセスモジュール用のアダプタを記述する必要があるかもしれ
これらが完了すると、アプリケーションはドキュメントをローカルとリモートに透過的に保存する事が可能にな
注意: 多くの OS がこの手の機能を実装し始めているため、新規実装のクライアントをこの既に存在している抽象モデルへ適用するのは控えた方が良いかもしれ
この例では、モジュールを抽象インターフェースのセットとして考え、このインターフェースのセットに他のモジュールを適合させることで、様々なファイルストレージシステムに対し、共通のインターフェースを提供する事ができ
=== Model View Controller ===
126行目:
[[ファイル:DIP_concrete_example.png|中央|Example of DIP]]
UI とアプリケーションレイヤーパッケージは主に具象クラスを含んでいて、コントローラーは抽象/インターフェース型を含んでい
これらの直接的な効果は、UI が直接 ApplicatonLayer や、ICustomerHandler を実装したどの具象パッケージも参照する必要がない事で
== 関連するパターン ==
依存性逆転の原則の適用はアダプターパターンの一例と見ることもでき
Plugin, [[Service Locator パターン|Service Locator]], or [[依存性の注入|Dependency Injection]] などの様々なパターンは上位レベルコンポーネントに対する選択された下位レベルコンポーネントの "run-time provisioning" を容易にする目的で導入され
== History ==
|