從JAVA里面的不一致性,淺談設(shè)計(jì)問(wèn)題
Posted on 2006-11-20 21:50 itspy 閱讀(2318) 評(píng)論(10) 編輯 收藏 所屬分類: 設(shè)計(jì)模式 、JAVA技術(shù)
?? 在JAVA里面,有如下幾個(gè)不一致的地方
?? 得到數(shù)組的大小,要通過(guò)length屬性
?? 得到String的大小,要用length方法
?? 得到集合(比如List,Set)的大小,要使用size方法。
?? 反正我是記憶這些有好多次了,結(jié)果剛才寫(xiě)這篇Blog時(shí),還要去查文檔,要不然寫(xiě)錯(cuò)了被人罵就虧大了。當(dāng)然JAVA類庫(kù)這樣設(shè)計(jì)也許有它的道理,但我想從使用的角度來(lái)想,也許把這三個(gè)統(tǒng)一(只使用一種)起來(lái)會(huì)更好。
?? 我說(shuō)的這個(gè)不一致性,我想也許有些人不認(rèn)同,所以一直放在心里沒(méi)有說(shuō)明。但今天我發(fā)現(xiàn)有一位大師和我的想法一樣,于是腰桿子變硬了,于是寫(xiě)了這個(gè)Blog給大家分享。
?? 這位大師就是《Effective C++》的作者,他在這本書(shū)中也得到了,STL在這方面就做的特別一致。(不好意思,拉個(gè)虎皮做大衣了^__^)
?? 說(shuō)到這我又想起以前一個(gè)同學(xué)做的一個(gè)軟件,它設(shè)計(jì)了一個(gè)類似資源管理器的軟件,使用樹(shù)狀結(jié)構(gòu)來(lái)管理一些資源。在給我看的時(shí)候,我發(fā)現(xiàn)我添加一些節(jié)點(diǎn)時(shí),老是彈出這樣的錯(cuò)誤提示:“這是樹(shù)的根,一個(gè)樹(shù)只有一個(gè)根”。我才發(fā)現(xiàn)他把開(kāi)發(fā)中的思維帶入了,程序設(shè)計(jì)與開(kāi)發(fā)中,沒(méi)有從使用者的角度來(lái)想。
?? 沒(méi)錯(cuò),一個(gè)樹(shù)是只有一個(gè)根,你的軟件也許是要使用樹(shù)結(jié)構(gòu)來(lái)管理才方便,但是你如果考慮到使用者的感受你就不會(huì)出現(xiàn)這樣的錯(cuò)誤提示了。我當(dāng)時(shí)就向他提議:比如可以這樣,如果你把根隱藏起來(lái),不讓使用者看到,這樣你不就可以使用樹(shù)的結(jié)構(gòu),但是使用者在使用時(shí)就沒(méi)有這樣的限制。
?? 看看Windows的資源管理器,我們平時(shí)也知道他的設(shè)計(jì)是一個(gè)樹(shù),但是沒(méi)有人留意到,它是一個(gè)嚴(yán)格的樹(shù)嗎?你一直往上走的時(shí)候,最終的結(jié)點(diǎn)是桌面,他明顯不是樹(shù)的根,而只是樹(shù)上的一個(gè)支結(jié)點(diǎn)。這樣的設(shè)計(jì)太符合我們的使用習(xí)慣,以至于我們平時(shí)都忽略了它,對(duì)它熟視無(wú)睹。
???反正我是認(rèn)識(shí),就向?qū)嵺`是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)一樣。一好好的設(shè)計(jì)的檢驗(yàn)就要看,這個(gè)設(shè)計(jì)的最終使用者的體驗(yàn)來(lái)檢驗(yàn)。上面的那個(gè)JAVA的不一致性,如果大多數(shù)JAVA語(yǔ)言開(kāi)發(fā)者都遇到了我這樣的問(wèn)題,那么這個(gè)設(shè)計(jì)肯定是有它的不足的了。