初めに
オブジェクト指向設計にはSOLID原則というものがあり、そのうちの「S」が単一責任の原則です。
オブジェクト指向設計について勉強していることをより理解するためにアウトプットします。
単一責任のクラスだと嬉しいこと
- 再利用がしやすい
-
変更が楽になる
- 変更がしやすいのでコードの移動、再設計がいつでもできる。いつでもできるので決断が必要になるまでそれを先延ばしにできる。必要に迫られてから変更、再設計を間違った方向で行わないで済む。
単一責任になっているか確かめるには
-
クラスに質問しておかしな質問になっていないかを確かめる
- 自転車のギアが例になっていた。「Gearクラスにタイヤのサイズを教えてください!」という質問は明らかにおかしくて、それはタイヤクラス(Wheel)に聞くべき。そのようなコードが紛れ込んでいないかどうかをチェックする
-
クラスのやっていることを説明する
- 単一責任になっていたら短く1文程度で説明できるはず。 「それと」や「または」などが説明に入ってくるようなら単一になっていない。
単一責任のクラスにするために
- あらゆるものを単一責任にする
- データはアクセサメソッドで隠蔽する
- データの形式などの変更にメソッド修正1つで対応できる
- メソッドも単一責任にする
- このメソッドは〇〇してから、△△したものを返す。とかだと〇〇と△△に分ける。
- 分けてみると△△はこのクラスの責務じゃないから他で処理した結果を渡してもらおうか、など気が付く
- やり過ぎてしまったらやり過ぎてから直せばいい。単一責任になっていれば修正も楽だから