我們通過offsetX和offsetY兩個屬性來描述這個偏移值,然而當(dāng)我們獲取控件偏移位置時,接口為:
var offset = ctrl.getOffset(); alert(offset.x + ", " + offset.y);
得到的偏移值使用了一個對象描述。那標(biāo)注呢?
var mkr = new BMap.Marker(map.getCenter(), {offset: [3, 4]});
天哪,標(biāo)注又是使用數(shù)組進行傳遞的。
在地圖API中,我們使用了三種不同的方式來描述偏移值,這無疑增加了開發(fā)者的使用難度,也更容易出錯。這個問題我們在API的后續(xù)升級中進行解決。
Role Expressiveness
How apparent is the relationship between each component and the program as a whole?
這個維度包含兩方面的意思,那就是:說你所想,想你所說(原文是:say what you mean and mean what you say)。
一段容易閱讀的代碼(mean what you say)不一定很容易寫出來(say what you mean)。所以在考慮這個維度時,不僅僅要考慮代碼是否容易閱讀,也應(yīng)該考慮編寫過程是否也同樣容易。
在地圖API初期,創(chuàng)建一個簡單的導(dǎo)航控件的代碼是這樣的:
var navCtrl = new BMap.NavigationControl({type: 1}); map.addControl(navCtrl);
這段代碼并不能完全表達出它的含義(cannot express its role),如果不借助文檔,你幾乎不可能知道type等于1意味著什么,最多你可能知道這里在指定控件的類型,但是1具體表示什么類型就不得而知了。
所以,升級之后的API做了如下調(diào)整:
var navCtrl = new BMap.NavigationControl({type: BMAP_NAVIGATION_CONTROL_SMALL}); map.addControl(navCtrl);
現(xiàn)在我們使用常量BMAP_NAVIGATION_CONTROL_SMALL來描述控件的類型,即使不看文檔,也能知道這是個小型的導(dǎo)航控件。
Domain Correspondence
How clearly do the API components map to the domain? Are there any special tricks?
這個維度描述了API所提供的類、方法與那些概念上的對象是否吻合,也就是接口和問題領(lǐng)域的相關(guān)程度如何。
如果代碼與問題領(lǐng)域相關(guān)程度高,那么開發(fā)者編寫的過程就會輕松許多,反之,開發(fā)者就需要多花費一些時間和精力才能完成他們的工作。
舉一個最簡單的例子,我們打算遍歷數(shù)組的每一個元素,并alert出來,那么我們可
用循環(huán)來實現(xiàn):
var a = [1, 2, 3]; for (var i = 0; i < a.length; i ++){ alert(a[i]); }
而另一種可能的方法是:
var a = [1, 2, 3]; a.each(function(x){alert(x)});
或者干脆寫成:
var a = [1, 2, 3]; a.each(alert);
程序員的目的是遍歷數(shù)組,然而第一種方法出現(xiàn)的for循環(huán)結(jié)構(gòu)以及相關(guān)的循環(huán)變量定義、數(shù)組長度判斷等內(nèi)容實際上是編程語言實現(xiàn)“遍歷”功能所附加的一些概念。
顯然這樣的代碼與問題領(lǐng)域的相關(guān)程度也比較低,而最后一種寫法對于母語是英語的人來說簡直就像說話一樣簡單。
原文:http://tinyurl.com/28xtqzj
本文鏈接:http://www.95time.cn/tech/web/2010/7909.asp
出處:百度泛用戶體驗
責(zé)任編輯:bluehearts
上一頁 認知維度與API的可用性評估 [7] 下一頁
◎進入論壇網(wǎng)頁制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評論。
|