[解決済み] Dependency InjectionはEncapsulationを犠牲にしなければならないのか?
質問
依存性注入の典型的なメカニズムは、クラスのコンストラクタまたはクラスのパブリックプロパティ(メンバ)を通して注入することです。
これは、注入される依存関係を公開し、カプセル化の OOP 原則に違反します。
このトレードオフを特定することは正しいですか?あなたはこの問題にどのように対処しますか。
以下の私自身の質問に対する回答もご覧ください。
どのように解決するのですか?
この問題には、あなたが興味深いと思うかもしれない別の見方があります。
IoC/依存性注入を使うとき、私たちはOOPの概念を使っているわけではありません。確かに私たちは「ホスト」として OO 言語を使用していますが、IoC の背後にあるアイデアはコンポーネント指向のソフトウェア工学から来ており、OO ではありません。
コンポーネント ソフトウェアは、依存関係を管理することがすべてです。一般的に使用されている例は、.NET のアセンブリ メカニズムです。各アセンブリは、それが参照するアセンブリのリストを公開し、これにより、実行中のアプリケーションに必要な部分をまとめる (および検証する) のがはるかに容易になります。
IoC を介して OO プログラムにも同様の技術を適用することで、プログラムの構成と保守を容易にすることを目的としています。依存関係を (コンストラクター パラメーターまたは何かとして) 公開することは、この重要な部分です。コンポーネント/サービス指向の世界では、詳細が漏れるような「実装タイプ」が存在しないため、カプセル化は実際には適用されないのです。
残念ながら、私たちの言語では現在、細かい粒度のオブジェクト指向の概念と粗い粒度のコンポーネント指向の概念を分離できないので、この区別はあなたの頭の中だけに留めておく必要があります :)
関連
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] Java のコア・ライブラリにおける GoF デザイン・パターンの例
-
[解決済み] Inversion of ControlとDependency Injectionの比較
-
[解決済み] なぜ依存性注入を使用するのですか?
-
[解決済み] 抽象クラスの代わりにインターフェイスを使用する場合とその逆は?
-
[解決済み] ProxyパターンとDecoratorパターンの違い
-
[解決済み] メソッドチェイニング - なぜ良い習慣なのか、そうでないのか?
-
[解決済み] 実装ではなくインターフェースにプログラムする」とはどういう意味ですか?
-
[解決済み] 依存性注入は、コンストラクタまたはプロパティ・セッタで行うのですか?
-
[解決済み] nullを返すのは設計ミス?[クローズド]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] Java のコア・ライブラリにおける GoF デザイン・パターンの例
-
[解決済み] ポリモーフィズムとは何か、何のためにあり、どのように使われるのか?
-
[解決済み] ProxyパターンとDecoratorパターンの違い
-
[解決済み] プライベートとプロテクト-ビジビリティ・グッド・プラクティスの懸念点【終了しました
-
[解決済み] 継承と集計の比較【終了しました
-
[解決済み] オブジェクト指向分析・設計によるエレベータのモデル化 [終了しました]
-
[解決済み] nullを返すのは設計ミス?[クローズド]
-
[解決済み] Dependency InjectionはEncapsulationを犠牲にしなければならないのか?