クラス設計の話

id:daisuke-m:20100714:1279119661 を見ていい機会だと勝手に思ったのでクラスインターフェースの設計について書くよ。
クラスのインターフェース(使い方)は「バランス」だとか「使い勝手」だとかいう怪しげなものを基準にして決めるべきではなくて、クラス単体で見たときにどうしてそうなっているかを論理的に
「説明」できるかどうかが重要。
「今使い勝手がいいクラス」が「将来ずっと使い勝手がいいクラス」ではないし、そもそも「使い勝手」なんてものは使い手に依存するファクター。そんなものに依存するよりは、オブジェクトそのものの本質を捉える努力をすればいい。

つまり、

  • クラスがもつ大概のメソッドの実行に必要(かつ変化しにくい)ものはコンストラクタで渡す
  • 必要だけど場合によっては切り替える必要があるものはsetterで渡す
  • 要るか要らないかよくわからなくてデフォルトでもいいようなものはsetterで渡す
  • メソッドを複数回実行するときに変化する可能性のあるものはメソッド引数で渡す

こんな感じのべき論で決めてしまえば、Dのパターンにしかならないと思うのですよ。場合によってはオーバーロードも必要になるでしょうが。

と思っているんだけど、言うのと実行するのとはまた別の問題でして・・・ごにょごにょ・・・orz