l

2012年5月22日 星期二

Implementation Patterns: Boolean Setting Method

May 21 23:07~23:46

image

 

昨天晚上依照慣例又失眠了,快兩點才睡著(迷之音:為什麼禮拜天晚上經常會睡不著哩?)今天下午講了三個小時的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。

沒有留言:

張貼留言