オブジェクト指向エクササイズ9つのルール

ルール

  1. メソッド内でのインデントは1段階まで

  2. else句を使わない

  3. プリミティブ型と文字列型はラップする

  4. 1行につき、ドットはひとつまでにする

  5. 名前を省略しない

  6. 全てのエンティティは小さく

  7. 1つのクラスにつき、フィールドは2つまで

  8. ファーストクラスコレクションを使用する

  9. Getter,Setter,プロパティを使用しない

メモ

1.メソッド内でのインデントは1段階まで

  • IF文は早期リターンをつかう
  • nullチェックはnull-objectパターンを使うことを考える
  • 二重なFor文は別メソッドに切り出す

2. else句を使わない

  • 早期リターンやStrategyパターン

3.プリミティブ型と文字列型はラップする

  • 変数が多くなると変数の命名だけでは役割がわからなくなる。
  • 変数に対する操作をカプセル化する

4.1行につき、ドットはひとつまでにする

  • オブジェクトの持ち物を操作するなら、オブジェクト側に操作を追加する。

5.名前を省略しない

  • そもそも長い名前(クラス名・メソッド名)にならないようにする?
  • 1つのクラスは役割は1つ(難しい…)

6.全てのエンティティは小さく

  • 1パッケージ10ファイル、1クラス50行
  • 役割の細分化

7.1つのクラスにつき、インスタンス変数は2つまで

  • 関連のあるフィールドはクラス化してまとめる
  • 無関係なフォールドがあると設計を見なおしたほうがいいかも

8.ファーストクラスコレクションを使用する

  • データのリストをラップする
  • コレクションは多くの振る舞いを持っているが、それではソースを読む際のプログラム上の意図やヒントを示せない。
    • コレクションの汎用的なメソッドでは、そのソースの意図が伝わりにくい。

ルール8:ファーストクラスコレクション - Strategic Choice

コレクションの振る舞いは外に見せる必要が無いかな

9.Getter,Setter,プロパティを使用しない

  • インスタンス変数を外部に公開すべきではない
    データの加工はデータを持っているクラスが責任を持つ
    複数箇所でデータへの加工が行われる可能性がある

一個ずつやっていこう。

参考

オブジェクト指向エクササイズ – Sonix Engineer Blog

おすすめオブジェクト指向練習方法|サイバーエージェント 公式エンジニアブログ

オブジェクト指向エクササイズのススメ