ソフトウェア開発メモ

日々のソフトウェア設計、実装で考えている、気づいた事を書いています。それが真実か否かは保証しません。悪しからず。

責務駆動設計:オブジェクトの命名方法

引き続きオブジェクトデザインです。

クラス名は大事です。クラス名によってどういう知識と行動を持たせるべきかが理解できます。また、 クラス名を言葉につねに表現する事によってどういう役割を果たすべきか自覚するようになります。

ただ、これが難しい。「クラス名、メソッド名が的確に命名できるならば上級設計者」といったあるベテラン設計者がいう意味が今ではよくわかります。ドメイン駆動設計でもユキビタス言語というキーワードでくどい程言及されています。

ネーミングの際の注意点です。例の如く再咀嚼しているので気になる方は本を買って読む事をお勧めします。まあ、経験を積めば自明な事が多いかな。

  • 汎用的な名前には修飾語をつける。逆に汎用的な名前は抽象クラスにする。

iOSでいうとUIViewとのそのサブクラス群、UIViewControllerとそのサブクラス群がそれに当たります。

  • 1つの名前には、(クライアントから)最も明らかで重要な事実だけを入れる。

→抽象クラスであれば名前そのもの、そのサブクラスであれば前述の修飾語の事ですね。それらをみればクラスの特徴が分かります。

  • サービス提供役には「ワーカー(〜er)」名あるい「ワーカー(〜Service)」名を付ける。

→最近はフィーリングに応じてそういう名前にする様にしています。

  • 広範囲な責務を暗示する名前は別クラスに分割できるサイン。

→後回し

  • プラットホームの慣習に適合する名前をつける。

→まあ、当たり前、郷に入れば郷に従え。

  • あまりに機能的なクラス名はつけない。

→サービス提供役と混同しそうだけど、たんなる関数として切り出している可能性が高い。

  • クラス名にライフサイクルを表す単語は含めない。

→これも初期化処理を纏めただけとかになりがち。iOSだと行数は増えるがUIApplicationDelegateの実装クラスにでも入れておいた方が自然。というかこのクラスの仕事の一つがそれ。