突っ走り書き

見せるほどのものでは..

【Jeff Bay】オブジェクト指向エクササイズ

Jeff Bay は The ThoughtWorks Anthology の中で,
オブジェクト指向エクササイズ(Object Calisthenics)を提案しています.
このエクササイズでは,次の9つのルールを守らなければいけません.

  1. メソッドのインデントは1つまで
  2. else句を使わない
  3. すべてのプリミティブ型や文字列をラップする
  4. 1行につきドットは1つまで
  5. 省略しない
  6. すべてのエンティティを小さくする
  7. 1つのクラスのインスタンスフィールドは2つまで
  8. List/Set などのコレクションはクラスでラップする
  9. すべてのフィールドを非公開にして,かつ getter/setter は禁止

難しいのは...

9つのルールの中で特に難しいのは,

  • 1つのクラスのインスタンスフィールドは2つまで
  • すべてのフィールドを非公開にして,かつ getter/setter は禁止

の2つだと思います.

相当キツい制約ですが,

  • フィールドを多い = クラスは多くの責務を持ちすぎ
  • getter がある = getter から情報が流出し責務が分散している

を意味しているというのが Jeff Bay の指摘です.
getter から情報が流出することに関しては,過去に言及したことがあります.
彼の提案を受け入れれば,各クラスの責務を考えるチャンスは増えそうです.

トレーニングの一貫として

普段からこれらのルールを守ることは相当難しいと思います
(Jeff Bay 本人はこのルールを守って相当な量のコードを書いているとか).
トレーニングの一貫としては,とても効果がありそうだと思っています.