2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |
2004年04月07日
■ [null]続き
なるほど「TELL, DON'T ASK」は良さそうですね。
http://arton.no-ip.info/diary/20040407.html#p04
ASKで、getHogeHoge()でnullを返すのは
Client:「(XXがやりたいんで)HogeHogeをくれよ。」
Server:「はい、HogeHogeです(実はnull)」
Client:「ありゃ、こりゃ何だい?nullって?よく分からないけど、じゃあ、勝手にやらせてもらうわ。」
ASKで、isHogeHogeAvailable()を使うのは、
Client:「(XXがやりたいんだけど)HogeHogeって今もらえるか?」
Server:「HogeHogeは今あいにくnot availableでして。」
Client:「ああ、なるほど、そういうことか。じゃあ、勝手にやらせてもらうわ。」
TELLでは、ClientはHogeHogeのことなんか知らない。
Client:「(XXがやりたいので)とにかくこれ頼むよ。」
Server:「(今ちょうどHogeHogeはnullなんだけどなー、じゃああーやってこーやって…)分かりました、やっておきます」
…な感じか。いずれにしても、ASKは、Serverの返すHogeHogeについてClientがよく知っていることが前提になっている。
■ [null]「nullを返してはいけない理由」の話、続き。
http://www.saisse.jp/pukiwiki/pukiwiki.php?%C6%FC%B5%AD%2F2004-04-06
「object == null」という等式のダメさは、マジックナンバーの有害さによく似ている。「== null」って何だ? その等式(メッセージでもいいけど)がそのコンテキストで表す“意味”は何なのか? それを考えると、「モデルの破綻」と言われても仕方ないと思います。MDAでいうと、PIMで書けないんじゃないかな、PSMやジェネレートされたコードではアリかもしれないけど、、のような感覚がぞわぞわと。(←想像しているということは、自分がMDAを全然使ってないよと言ってるのと同じだなー)
「どうしてもnullを返したくなったら」のくだりを読んでいて湧き起こった気持ちを、「禁煙方法について書かれた文章を読んでいる喫煙者」の気持ちってこういう感じなのかも、と思ったことを白状しておきます。
# Saisse 『”object == null”というのは場合と状況によっていろんな意味を表してしまうという問題があります。それにきちんと名前を付けていくのがモデリングなのではないかと。』
# uno 『意味が不明瞭になるという点については同意できます。』
# nobody 『[Tell. Don’t ask!] ハイパーリンク先が http://arton.no-ip.info/diary/20040407.html/pppppp になっているようです。ただしくは http://arton.no-ip.info/diary/20040407.html#p04 でしょうか。こちらの勘違いでしたらすみません。(FireFoxで拝見しております)。ではでは。』
# uno 『ありがとうございます。リンク先指定のURLと「”>」の間に改行を入れてしまっていました。改行を消したら直りました。(改行が「/pppppp」に変換される理由はよく分かりません…。)』
# Saissee 『確かにTELLは理想的に見えますが、それはTELLするオブジェクトが何のReturnも期待しない場合なのでは...逆にTELLした結果をチェックする必要がある場合にはASKが必要になってくると思います。』