产品设计

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

// 依次创建导航控件、缩略地图和比例尺 map.addControl(new BMap.StandardMapControl()); map.addControl(new BMap.OverviewMapControl()); map.addControl(new BMap.ScaleControl());

上面的代码通过多次添加不同的控件使该地图界面与百度地图保持一致。如果我们提供一个抽象层次更高的接口呢?可能会有如下的调用方式:

// 示例四
map.addTypicalContorls();

上面代码将之前的三句addControl换成了一句addTypicalContorls,添加多个控件的任务完全由addTypicalContorls方法内部去完成。

通过上面的示例我们看出,示例一和示例三的抽象程度属于中等,示例二的抽象程度低,示例四的抽象程度最高。
接口的抽象层次越高,开发者入门越容易,使用的接口数量少,但接口的灵活性低;反过来,接口的抽象层次越低,开发者需要了解的东西就越多,运用的接口数量也越多,代码写起来越复杂,但好处是接口灵活。

相信大部分开发者在刚接触一套新的API时,都喜欢通过少量的接口就能完成一些任务,这样学习成本低,开发起来起来也更轻松容易。
随着入门者逐渐使用API,他们当中就会出现一些具有一定开发经验且在灵活性上有很高要求的人,这就要求API能够提供一些层次较低、灵活程度较高的接口。
这些人也希望通过多个接口的组合来帮助自己实现功能。
在一套大型的API或者一个framework当中,需要考虑为不同的开发者提供不同抽象层次的接口,最大程度满足不同的需求。

Learning Style

Learning Style在CD中是没有的,微软将这个维度引入了进来,它的解释为:

What are the learning requirements posed by the API, and what are the learning styles available to a targeted develper.

开发者用API是来完成一些列的任务的,那么以下两种不同的完成方式确定了不同的学习风格。

  • 如果开发者完成任务需要少量的接口,并且每个接口之间相互依赖的程度较低,那么我们说API支持一种渐进的少量的学习方式。
    也就是说,开发者仅需要里了解与自己任务相关的接口,并且通过循序渐进的方式进行学习。

  • 如果开发者完成任务需要大量的接口,并且每个接口之间关联复杂,那么我们说API需要一种由上至下或者一种结构化的学习方式。
    也就是说,在用API完成任务之前,开发者需要了解API不同的接口以及它们之间的关联关系,同时可能还需要了解整个API的结构和其他一些新概念。

再拿百度地图API来说,如果开发者想创建一个简单的地图,他需要了解如下内容:

  1. 如何引用API(加载JavaScript)。
  2. 地图坐标和级别的概念。
  3. 知道通过BMap.Map类创建地图实例,并且通过centerAndZoom方法进行初始化。
  4. 知道通过BMap.Point类创建坐标实例。

可以看出,地图API的学习风格接近于第一种,属于渐进式的。开发者仅需要了解少量的接口和一些概念就能完成任务了。

不同的开发者可能喜欢不同的学习方式,比如有些人喜欢渐进式的,希望编写少量代码就能立刻看到成果,在此基础上逐步学习API中的其他接口。
另外一些开发人员希望在使用API之前能从一个较高的层次上了解其架构,喜欢从整体把握,接着再寻找解决任务的最佳方案。

在一套API中,两种不同的学习风格可以共存

Working Framework

What is the size of the conceptual chunk needed to work effectively.

该维度描述了开发者在使用API的过程中需要了解(keep track of)的信息量有多少,即开发者使用API时的工作框架是什么样的

比如,在通过BMap.Map类创建一个地图实例时,开发者可以指定地图所使用的坐标系统是经纬度还是墨卡托,一旦确定下来并创建地图后。这个坐标系统就是开发者需要了解的信息。
如果在后续开发中,需要添加一些标注、折线到地图上,开发者就要保证标注、折线的坐标与地图当前的坐标系统一致,否则程序就会出问题。

在API中,working framework的形式主要有以下三种:

  • 如果信息可通过API本身来表示,那么工作框架是本地(Local)式的。
  • 如果信息不通直接通过API来表示,但是可通过开发者的代码结构体现,这时工作框架是全局(global)式的。

  • 如果信息既不能通过API本身来表示,也不能在代码结构中体现,那么工作框架是系统(system)式的。

不同的开发者可以适应不同的工作框架模式,只要在他们的可接受范围内就行。

Work Step Unit

How much of a programming task must/can be completed in a single step.

这个维度描述了开发者完成特定任务所需要的步骤有多少,可以简称为工作单元

比如用户想在地图上添加自定义的标注,这个任务可通过以下三个步骤(不包含地图创建过程)完成:

  1. 创建一个图标对象。
希望看到您的想法,请您发表评论x