产品设计

认知维度与API的可用性评估

"认知维度与API的可用性评估"

什么是认知维度

认知维度(也称作符号认知维度,Cognitive Dimensions or Cognitive Dimensions of Notations,简称CD)是一套关于符号标记、用户界面和编程语言的设计原则。
认知维度提供一种轻量级的方法来帮助分析设计,它包含了14条不同的维度来指导设计。

API的可用性

API和一般的产品一样,也需要具有良好的可用性。但API的不同之处在于,它一旦被发布出去,修改升级都比较困难。如果你变更了API,很多使用你API开发出来的产品就会受到影响,甚至无法正常工作。
所以我们在发布一套API之前,一定做了很多工作:严谨的设计、严格的测试等等。但是很少有人关注API的可用性,也没有行之有效的方法来指导API的可用性设计。
在微软,认知维度这个工具被拿来用在了API的可用性设计上,并对其进行适当的修改,形成了新的12个维度。

我们先来看看认知维度中的一个维度:Abstraction Level

Abstraction Level

Abstraction Level在CD中的描述为Abstraction Gradient,其解释为:

What are the minimum and maximum levels of abstraction exposed by the notation? Can details be encapsulated?

用到API设计中,可以转化为如下解释:

What are the minimum and maximum levels of abstraction exposed by the API, and what are the minimum and maximum levels usable by a targeted developer.

这个维度可理解为API所暴露出来的抽象层次是什么样的。如果抽象层次高,开发者使用起来将会感觉非常简单、方便,但缺点是不够灵活,缺乏自定义性;如果抽象层次低,则系统具有较大的灵活性,但却牺牲了部分易用性,开发者学习起来的代价也比较大。

我们通过一个具体的使用场景来理解这个概念,下面的代码片段在地图上创建了两个按钮,点击这两个按钮可分别将地图进行放大一级和缩小一级的操作:

// 示例一
map.addControl(new BMap.StandardMapControl({type: BMAP_STD_MAP_CONTROL_ZOOM_ONLY}));

创建按钮实际上是向地图容器里添加了新的DOM元素,并指定了一些样式,最后再绑定两个click事件,并在事件监听函数中调用map的zoomIn和zoomOut方法。
在地图API中,这些细节都被封装成为抽象的控件,对于开发者来说只要new一个这样的控件,同时指定一种外观类型(BMAP_STD_MAP_CONTROL_ZOOM_ONLY指仅包含放大和缩小按钮),再add到地图当中就好了。
可以看出这样的接口使用起来简单,接口数量少,也容易理解。

BMap.StandardMapControl的样式是预先定义好的,最多支持开发者选择几种不同的展现形式,如果开发者希望自定义按钮的样式该如何做?
这时可以选用抽象层次较低的API,请看下面示例:

// 示例二
// 定义一个控件类
var ZoomControl = function(){

  // 默认停靠位置和偏移量
  this.defaultAnchor = BMAP_ANCHOR_TOP_LEFT;
  this.defaultOffset = [10, 10];

};
ZoomControl.prototype = new BMap.Control();
ZoomControl.prototype.initialize = function(map){

  // 容器元素
  var container = document.createElement("div");

  var divZoomIn = document.createElement("div");
  divZoomIn.appendChild(document.createTextNode(

								

							
希望看到您的想法,请您发表评论x