Jeff Bay は The ThoughtWorks Anthology の中で,
オブジェクト指向エクササイズ(Object Calisthenics)を提案しています.
このエクササイズでは,次の9つのルールを守らなければいけません.
- メソッドのインデントは1つまで
- else句を使わない
- すべてのプリミティブ型や文字列をラップする
- 1行につきドットは1つまで
- 省略しない
- すべてのエンティティを小さくする
- 1つのクラスのインスタンスフィールドは2つまで
- List/Set などのコレクションはクラスでラップする
- すべてのフィールドを非公開にして,かつ getter/setter は禁止
難しいのは...
9つのルールの中で特に難しいのは,
- 1つのクラスのインスタンスフィールドは2つまで
- すべてのフィールドを非公開にして,かつ getter/setter は禁止
の2つだと思います.
相当キツい制約ですが,
- フィールドを多い = クラスは多くの責務を持ちすぎ
- getter がある = getter から情報が流出し責務が分散している
を意味しているというのが Jeff Bay の指摘です.
getter から情報が流出することに関しては,過去に言及したことがあります.
彼の提案を受け入れれば,各クラスの責務を考えるチャンスは増えそうです.
トレーニングの一貫として
普段からこれらのルールを守ることは相当難しいと思います
(Jeff Bay 本人はこのルールを守って相当な量のコードを書いているとか).
トレーニングの一貫としては,とても効果がありそうだと思っています.