2007年07月11日

必要な情報は親から貰うんじゃなくて子供から貰え

  
このタイトルは何を言いたいのかというと、

ある処理をするのに必要な情報は、それを呼び出す親プログラムから引数などで渡してもらう、ってのが普通のやり方だと思います。

でも、発想を逆転してあげることで、とても設計がすっきるとする場合があります。
引数で渡して貰うんじゃなくて、サブクラスから情報を貰うようにするわけです。
要は、Template Method を上手く活用するってこと。

特に、受け取りたいデータが沢山ある場合は、引数で受け渡すことにすると、呼び出す側の負担が増えるし、コードも読みにくくなります。

virtualなメソッドを定義し、必要な情報をサブクラスから貰うようにすれば、呼び出す側のコードがすっきりするし、責任範囲が明確になります。


もっとも、どんな場合でも使えるっていうわけじゃないけどね。


この記事へのコメント
OLE/ActiveX におけるコンテナ/サイト/埋め込みオブジェクトや、.NET におけるコンテナ/サイト/コンポーネントの関係がまさにそんな感じですね。

適用できるパターンはやっぱり、2つのオブジェクトが対等というよりも親子的な関係(コンテナと上物?)にある場合なんでしょうね。

Posted by 渋木宏明(ひどり) at 2007年07月12日 08:06
確かに親子的な関係?(なんて表現したらわからないですが)の時には、適用できる場合が多いですね。
でも、それ以外でも適用できる場面はあると思うんですが、どんな時っていうのが、うんまく言葉で表せません。
Posted by Gushwell at 2007年07月12日 12:45
 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/50919900