浅谈关于JavaScript API设计的一些建议和准则(4)

在艺术作品中,强调是利用对比来使作品中某一方面脱颖而出形成一个焦点。在许多API中,焦点可能是一个通道或者类库主要方法的锚点。另外一个关于强调性的例子可以参考“链接”方式或者fluent API,它通过增加强调性效果突出了类库中心对象。jquery倾向于从许多功能演示中的强调这个对象:

$('ul.first').find('.overdue') .css('background-color','red') .end() .find('.due-soon') .css('background-color', 'yellow');

对于许多现代的类库,另一个关于强调的例子是可扩展性:类库创建者没有提供的那部分,会为你提供一个工具你可以自己完成相关扩展。

一个典型的例子可以参考jQuery'sfn(pronounced “effin”) namespace, 一般的扩展点可以通过数不清的插件和补充的类库来完成:

(function($) { $.fn.kittehfy = function() { return this.each(function(idx, el) { var width = el.width, height = el.height; var src= "http://placekitten.com/"; el.src= src + width + "https://www.jb51.net/" + height; }); }; })(jQuery);

另一个扩展性的例子是Backbone的“extend”的函数,我们已经在本文中看到过:

var DocumentRow = Backbone.View.extend({ tagName: "li", className: "row", events: { "click .icon": "open", "click .button.edit": "openEditDialog" }, render: function() { ... } });

2015624141715183.png (634×258)

可扩展作为强调性的一方面是因为它让我们意识到这样的一个事实,已有的类库并不意味着一切是完美的,同时也鼓励我们扩展适合自己的类库。当类库支持扩展时,它们不仅开启了新的用途,也使无数开发者受益于一般的用途。一个最好的例子是Backbone.Marionette框架,一个扩展于Backbone的类库,它的目标是“简化大型的javascript应用程序的结构”。如果不是像Backbone那样的类库扩展,Marionette之类的类库将变得非常复杂,甚至不可能实现。

API 设计:不只为库代码编写者

如果你不是一位 JavaScript 库的编写者,而是一位 JavaScript 应用开发者或库的实现者,你可能会认为本文中的原则并不适用于你。毕竟,我们大多数人在听到“API”的时候,往往想到的是第三方库,一如我在本文中的示例一样

事实是,API ,如同其定义所言,无非就是一个提供给他人利用的隔离功能的接口。 现在,让我用一句老话来强调很重要的一点:编写模块化的 JS 代码是为了实用,使用的次数并不重要。


正如本文中引用的类库,你可以把自己的javascript代码公开接口给其他人。即使你的代码的用户是一小部分或内部团队——甚至你构建自己的一个私有类库——你不必像一个公开类库的作者那样考虑本文中API设计原则和这些原则的实现。利用API设计的好处是即使只针对一个使用者,也要像对数百万使用者一样设计。

因为API的设计代表着对开发者的用户体验,它就像UI设计对于最终用户的重要性一样。正如我们可以通过学习一些原则和参考一些好的或者坏的例子来开发出优秀的UI一样,我们也可以通过同样的方式学习到更好的API设计。应用文中提到的四个原则,以及其他你自己发现的原则,可以帮助你建立出优秀的API,并且让用户得到良好的体验。

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wgdfwj.html