skillup

技術ブログ

アーキテクト設計全般

オブジェクト指向設計 単一責任のクラスの設計

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

オブジェクト指向をするうえでの大事なポイントなど

単一責任のクラス設計

メモ

  • 単一責任のクラスの設計(そのクラスの関心ごとは1つにすべき)
  • クラスだけではなくメソッドも単一責任の原則にする
  • 例えばインスタンス変数の変更などは一般的には影響度が非常に大きい(現時点でインスタンスを呼び出している場所すべてに影響を与える)
    その場合、クラスを分離する、などの選択肢もある
  • クラスの性質を一言で説明できるようにする(あれもこれもの場合には複数になっていることが多い)
    その場合、分離を考える(分離が必ずしも善ではない。)
  • 日本語自体でクラスの性質が通るか考えてみる(参考書P43のといかけ)
  • セッター、ゲッターの意図はインスタンス変数の隠蔽と、変更時に変更コストを1か所にすることができるため
  • データ構造自体に依存するようなケースもあるため、ラッパーメソッドを使う(p49参照)
  • なんらかの構造に依存するようなコード(例えば配列のインデックス)はさけ、クラスで定義し内部構造に触らなくする(p49参照)
  • 単一でない場合はその構造を隔離することを考える

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

  • クラスはできる限り最小にする(メソッドはできれば10以内)
  • メソッドの行数はなるべく少なくする(目安として20行以内)
  • データベースやWebからの変数の依存度を下げる(依存度が上がるとテストが難しくなる)
  • 他のクラスを必要とするような部分を極力すくなくする

感想

変更を予測することが困難なので、変更に備えて関心事でクラスをつくる。日本語で表記できるか否かという基準は大事。日本語が複雑になるようであればクラスを分けたほうがいいかも。3章の依存関係と合わせて、単一責任でない場合は隔離(別クラスとして定義)したほうがよさげ。

参考文献

オブジェクト指向設計実践ガイド

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

執筆者:


comment

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

関連記事

no image

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

オブジェクト指向シリーズ。読みにくい本が多い中でオブジェクト指向設計実践ガイドは勉強になるなー。 Contents1 依存関係の管理1.1 メモ1.2 実際のコーディング上のコツ1.3 感想 依存関係 …

no image

オブジェクト指向 プレゼンテーション層

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日はプレゼンテーション層、いわゆるMVCのViewにあたる部分。 Contents1 プレゼンテーション層の考え方1.1 要点1. …

no image

オブジェクト指向 データベース層

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日は主にデータベース層の考え方について。 Contents1 データべース層1.1 要点1.1.1 典型的なダメテーブル設計1.1 …

no image

オブジェクト指向 値オブジェクトの活用と場合分けに関して

オブジェクト指向 その1 オブジェクト指向 その2 オブジェクト指向 その3 でオブジェクト指向に触れたんですが、基本から勉強しなおす必要があると思い、まとめ&追記 参考文献 現場で役に立つシステム設 …

no image

Facadeパターンについて(Laravelを題材に)

LaravelのFacadeについて自作する機会があったので、メモ。 Contents1 サンプル2 使い所3 メリット4 デメリット5 参考リンク サンプル https://github.com/u …

アーカイブ