- 締切済み
オブジェクト間の依存性とは
DIなどの解説として「オブジェクト間の依存性」というキーワードが 良く出てきます。これが強すぎると設計上良くないみたいです。 ただこれが具体的には理解できず・・ 「オブジェクト間の依存性が強すぎる」とは具体的には どのような設計や記述のことを言うのでしょうか?。 お手数ですがアドバイスお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- unibon
- ベストアンサー率47% (160/340)
DI は知りませんが。。。 依存性がまったくないとプログラムが書けませんが、依存性がありすぎるとゴチャゴチャになってしまいます。 具体的にとくに多いのが、クラスAがクラスBを使っていて、クラスBがクラスAを使っている、という両方向の依存性です。小規模なプログラムならば、これをまったくなくすほうが良いです。大規模になれば、どうしても多少は使わざるをえないかもしれませんが、できるだけ避けたほうが良いです。 要は余計なことを知りすぎると良くないわけです。(闇の?)組織の中でも構成員は、自分の担当業務に必要なことしか知らされていないのが普通です。
- bnosuke
- ベストアンサー率21% (4/19)
>DIなどの解説として「オブジェクト間の依存性」というキーワードが >よく出てきます。これが強すぎると設計上良くないみたいです。 たぶん、「オブジェクト間」ではなく、「クラス間」だと思いますので、その前提で回答します。 一言で言うと、あるクラスAの中に、別のクラスBの具体名が書いてある状態が依存性の強い状態です。 依存性が問題になるのは、Aの中でBのオブジェクトを使っていて、差し替えの可能性がある場合。 クラスBの代わりにクラスCを使おうと思ったとき、クラスBのソースファイルに手を加えなくてはなりません。 小さな事のようですが、結構良くない状態です。 これを解消するために、以下の変更をします。 1)クラスAの中で具体的なクラスを作らず、外からもらうようにする 2)クラスBのメソッドを抽出してインターフェイスIをつくる 3)クラスBにインターフェイスIを実装する 4)クラスAはBをもらうときにIとして受け取る こうしておくと、将来BをCに変更するときには、 5)Iを装備したクラスCを作る 6)クラスAへCを渡す と言う変更になります。 ポイントは、クラスAの中は全く変更が必要ないと言うことです。 もちろん、クラスAを使っているクラス(クラスMAINとしましょうか)に変更は必要ですが、それは変更の許されるクラスでしょう。 ここも変更を許さないとして、クラス名の記述を外部の設定ファイルにまで追いやってしまったのがDIコンテナです。 クラス名を具体的に書く代わりにインターフェイスを使うというのは、人の名前の代わりに役割の名前を書くようなものと考えてください。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
例えば、オブジェクト内のフィールドを直接読み書きしているとか・