回答編集履歴

2

update

2016/08/15 03:01

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 「コンストラクタ・インジェクション」と呼ばれるDIパターンの一種ですね。
5
+ 構造的には「コンストラクタ・インジェクション」と呼ばれるDIパターンにみえますね。(ただし、後述する理由によりこれらをDIとは呼べない気がしますが)
6
6
 
7
7
 
8
8
 

1

refine

2016/08/15 03:01

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
 
17
- 円(`Circle`)オブジェクトにとって中心位置や半径という属性は、そのオブジェクトの本質をなす直接的な構成要素です。それらを外部から注入するという設計には違和感があります。また位置(`Point`,`Cordinate`)や長さ(`Length`)を表す型を導入していますが、これらは型安全性のために導入されるものであり、DIで用いるインターフェイス継承とは役割が異なっています。
17
+ 円(`Circle`)オブジェクトにとって中心位置や半径という属性は、そのオブジェクトの本質をなす直接的な構成要素です。それらを外部から注入するという設計には違和感があります。また位置(`Point`,`Cordinate`)や長さ(`Length`)を表す型を導入していますが、これらは型安全性(単位系区別)のために導入されるものであり、DIで用いるインターフェイス継承とは役割が異なっています。
18
18
 
19
19
 
20
20
 
@@ -22,4 +22,8 @@
22
22
 
23
23
 
24
24
 
25
- 関連するソフトウェア・コンポーネント(クラス)にて、あるクラスの内部実装では 他方の **インターフェイスにのみ依存** するよう実装し、そのインターフェイスを継承/実装した **具象クラスを外部から注入する** パターンがDIだと思います。こういったインターフェイスと実装の分離が不可能なクラスにはDIを適用できません。また、DIによりソフトウェア・コンポーネント実装同士より疎結合にできますが、過度な疎結合アーキテクチャはメンテナンスコストが増大します。どこまでをDI適用により疎結合にするかは、対象アプリケーションが解決する課題次第かと思います。
25
+ 関連するソフトウェア・コンポーネント(クラス)にて、あるクラスの内部実装では他方の **インターフェイスにのみ依存** するよう実装し、そのインターフェイスを継承/実装した **具象クラスを外部から注入する** パターンがDIだと思います。
26
+
27
+
28
+
29
+ こういった「**インターフェイスと実装の分離**」が不可能なクラスにはDIを適用できません(質問中の例が該当)。また、DIによりソフトウェア・コンポーネント実装同士をより疎結合にできますが、過度な疎結合アーキテクチャはメンテナンスコストが増大します。どこまでをDI適用により疎結合にするかは、対象アプリケーションが解決すべき課題次第かと思います。