| 
 我们通过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标准化版块参加讨论,我还想发表评论。
	       |