オブジェクト指向汚染

以前id:tokuryoさんのブログを呼んでいてちょっと
おかしいんじゃないのかなと思っていた部分にトラバしてみる。

http://d.hatena.ne.jp/tokuryo/20060511

例えば、「誰も借りていない状態」->「貸し出し中」->「延長中」->「誰も借りていない状態」
といった具合に状態遷移するので
STATEパターンを適用することで(抽象クラス1実装クラス3)
色々な振る舞いをポリモーフィズム化することができるように
なるんじゃないだろうかと妄想しています。


ここで気になっていたのが
ビデオのレンタルにおいてビデオの状態の変化をSTATEパターンで表そうというところ。


「状態が変化するからSTATEパターン」という発想は
オブジェクト指向的に考える人には自然な流れだと思うし
私も以前はそういった流れで設計していました。


でもこの場合ほんとにSTATEパターンを使用するべきでしょうか。


STATEパターンの目的としては使用者はその時の状態にかかわらず
使用者のやりたい操作が行えるという部分がメリットです。


今回の場合使用者はビデオの状態がどうかによって


・ユーザに貸せる貸せない
・延滞料金を支払わせるべきか


等、データ使用者が振る舞いを変える必要があるのでSTATEパターンの適用は
不適当かと思います。


よくシステムで用いられるSTATEパターンの例に
エディタ等の戻るボタンがあげられます。
この場合、使用者は戻るという操作を行いたいだけなので
STATEパターンを利用することで、
文字を消したり、追加したりという状態における振る舞いの違いを
意識する必要がなく戻る操作が行えます。


どうしてもオブジェクト指向を突き詰めると、
パターンを使いたくなってしまい
過度にオブジェクト指向を使用してしまう傾向があると思います。
(もちろん私もそうでした)


これが最近私が思っているオブジェクト指向汚染な設計。


ということで私は最近アンチオブジェクト指向目線で
ほんとにそのパターン導入は有効なのか、過度に複雑に
なっていないかを考えるようにしています。


案外オブジェクト指向で設計するよりも
if文を使った方がスマートになる場合があります。


シンプル イズ ベストということで。