skillup

技術ブログ

アーキテクト設計全般

オブジェクト指向設計 依存関係の管理

投稿日:2017年8月24日 更新日:

オブジェクト指向シリーズ。読みにくい本が多い中でオブジェクト指向設計実践ガイドは勉強になるなー。

依存関係の管理

メモ

  • オブジェクト指向では共同の仕組みが大半なため、必然的に大量の依存関係を生む(p62の図)
    それが本当に必要か?をつねに考える(例 インスタンスそのものの参照、引数の対応、メソッドを直で対応させる・・)
  • 依存しているオブジェクトに変更があったら?を常に考える(P66)
  • 疎結合により対象が変更してもコードが変わらない。対象の変更の影響を受けないようにする(P66のWheelの例。DIの一種)
  • クラスを丸ごとインスタンスの際にとれれば、インスタンス変数の変更影響を受けない。最悪それができなければインスタンス内で依存のインスタンス作成を行う。
  • P71のようなラッパーメソッドを作ること(def diameter)により、外にあるクラス(wheel)のメソッドの変更の影響が受けにくくなる
  • 依存の少ないもののほうに変更の可能性があるクラスの依存を預ける(この場合でいうとWheelにGearを預ける)→依存度の方向の逆転
  • 依存度の高さと変更の可能性を常に見る

実際のコーディング上のコツ

  • 外部クラスのインスタンス作成をなるべく行わない
  • 外部クラスのメソッドに関してはラッパーメソッドを使う(p70)
  • インスタンス生成の場合、複数の受け入れ方を前提としておく
  • インスタンス生成の際にハッシュを使う→固定化された順番の引数への依存度を下げることができる。ただし絶対固定のものは残しておく(絶対必要なもの+オプションを配列化するのがよさげ)
  • ディフォルト値の設定→歯抜けだったり、ある引数が使われない場合もバグにならない
  • インスタンス生成を外部化する

感想

いままではクラス間の依存関係に無頓着だった・・というかそういうものだと思っていたので、問題化してないかったなー。

DIに関しての本質を言うと、数学でいうと数字を使わずに文字(x)を使う、みたいなニュアンスだと思う。こうすると数字が変わっても変数なので変更に依存しない。DIを初めて見たときはわけがわからなかったけど、今となるとそのすごさがよくわかる。P71のラッパーメソッドも最初見たときは意味が分からなかったが今だとそのありがたみがわかる。依存に関しては業務要件の理解度にもつながってくるかもしれない。※変更しやすさについての理解など。

-アーキテクト設計全般
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

オブジェクト指向 アプリケーション間連携(主にWebAPI)

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日はプレゼンテーション層、いわゆるMVCのViewにあたる部分。 Contents1 アプリケーション間連携(主にWEBAPIに関 …

no image

ステートパターンについて

トランザクション系のデータの場合、スタータスの遷移がキーになることが多く、仕様の把握に関してこの部分の理解が重要です。 今まで、ステータスの遷移に関してはExcelを使って表現していたことが多かったの …

no image

Observeパターンについて

Contents1 Observeパターン2 他の対策2.1 プログラムで頑張って制御2.1.1 メリット2.1.2 デメリット2.2 Databaseのtirggerを使う(DB更新系のみ)2.2. …

no image

DIについての再考察

DIに関しては今までも何度か触れましたが、最終的には環境の差異を吸収できるなどが一番のポイントかと。 サンプルソース https://github.com/umanari145/effector 上記 …

no image

オブジェクト指向について その1

ちょっと最近、仕事でソースの書き方がいい加減になってきたのでオブジェクト指向について考え方を再確認しようと思います。 参考文献 SoftWareDesign 2015年9月号 何も考えずにプログラムを …

アーカイブ