May 21 23:07~23:46
昨天晚上依照慣例又失眠了,快兩點才睡著(迷之音:為什麼禮拜天晚上經常會睡不著哩?)今天下午講了三個小時的design patterns,回家之後覺得好累。話說design pattern這本書裡面的這個Decorator pattern好像不太容易理解,也許下次要換個例子或是多準備幾個不同的例子,看看那一個比較容易被聽眾吸收。
體力不支,今天只能來個極短篇,談一下「課本」第93頁的Boolean Setting Method這個implementation pattern。這個pattern顧名思義就是用來探討設定boolean值的method該如何設計。鄉民們可能會想:「拜託,這個也需要寫成一個pattern喔」。設定boolean值還不簡單,不就這樣:
void setValid(boolean newState){
…
}
等一下,看到這邊有另一派的鄉民可能會說,上面這種寫法不太好閱讀,因為既然setValid()的參數不是true就是false,那為什麼不提供下面這種方式來設定boolean值哩。
void valid(){
…
}
void invalid(){
…
}
這樣子程式讀起來似乎比較容易理解,比較下面兩種寫法:
Order order = new Order();
order.setValid(true);
order.setValid(false);
以及
Order order = new Order();
order.valid();
order.invalid();
那一種比較容易理解?看起來似乎是第二種寫法比較容易理解。不過說真的Teddy以前大部分(大概95%以上)的比例會使用第一種寫法,可能Java程式寫久了,反射性的把所有的屬性設定都用getter與setter的方式來寫,設定boolean值當然也不例外。
不過,看到這邊可不要先妄下結論,以為Kent Beck就是建議大家不管任何時候一律都用第二種寫法。如果鄉民們的程式裡面經常會出現類似這樣的敘述:
Order order = new Order();
if (… boolean expression…)
order.valid();
else
order.invalid();
那麼Kent Beck建議大家還是回頭直接使用setValid(boolean)這種寫法就好了:
Order order = new Order();
order.setValid(… boolean expression…);
***
看到這邊鄉民們不曉得會不會覺得「肚子裡一把火」,怎麼這個pattern也太隨便了吧,看到最後的結論好像是兩種寫法都可以,這麼沒有原則。沒錯,上面提到的兩種方法都是Boolean Setting Method,Kent Beck只是把他個人認為在何種時機應該使用那種寫法的看法告訴鄉民們,至於要不要買單還是要由鄉民自行決定。
***
友藏內心獨白:怎麼寫完部落格之後精神變好了,不是該睡覺了嗎?…Orz。
沒有留言:
張貼留言