我们通过offsetX和offsetY两个属性来描述这个偏移值,然而当我们获取控件偏移位置时,接口为:
var offset = ctrl.getOffset(); alert(offset.x + ", " + offset.y);
得到的偏移值使用了一个对象描述。那标注呢?
var mkr = new BMap.Marker(map.getCenter(), {offset: [3, 4]});
天哪,标注又是使用数组进行传递的。
在地图API中,我们使用了三种不同的方式来描述偏移值,这无疑增加了开发者的使用难度,也更容易出错。这个问题我们在API的后续升级中进行解决。
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)。所以在考虑这个维度时,不仅仅要考虑代码是否容易阅读,也应该考虑编写过程是否也同样容易。
在地图API初期,创建一个简单的导航控件的代码是这样的:
var navCtrl = new BMap.NavigationControl({type: 1}); map.addControl(navCtrl);
这段代码并不能完全表达出它的含义(cannot express its role),如果不借助文档,你几乎不可能知道type等于1意味着什么,最多你可能知道这里在指定控件的类型,但是1具体表示什么类型就不得而知了。
所以,升级之后的API做了如下调整:
var navCtrl = new BMap.NavigationControl({type: BMAP_NAVIGATION_CONTROL_SMALL}); map.addControl(navCtrl);
现在我们使用常量BMAP_NAVIGATION_CONTROL_SMALL来描述控件的类型,即使不看文档,也能知道这是个小型的导航控件。
Domain Correspondence
How clearly do the API components map to the domain? Are there any special tricks?
这个维度描述了API所提供的类、方法与那些概念上的对象是否吻合,也就是接口和问题领域的相关程度如何。
如果代码与问题领域相关程度高,那么开发者编写的过程就会轻松许多,反之,开发者就需要多花费一些时间和精力才能完成他们的工作。
举一个最简单的例子,我们打算遍历数组的每一个元素,并alert出来,那么我们可
用循环来实现:
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);
程序员的目的是遍历数组,然而第一种方法出现的for循环结构以及相关的循环变量定义、数组长度判断等内容实际上是编程语言实现“遍历”功能所附加的一些概念。
显然这样的代码与问题领域的相关程度也比较低,而最后一种写法对于母语是英语的人来说简直就像说话一样简单。
原文:http://tinyurl.com/28xtqzj
本文链接:http://www.blueidea.com/tech/web/2010/7909.asp
出处:百度泛用户体验
责任编辑:bluehearts
上一页 认知维度与API的可用性评估 [7] 下一页
◎进入论坛网页制作、WEB标准化版块参加讨论,我还想发表评论。
|