API 设计是一门艺术,也是一门科学,很不幸,很多聪明的人都没能做好这件事儿。之所以如此,是因为他们把"给开发者带来烦恼"当成了 API 设计的第一要务。
我的兄弟姐妹们,就让我们聚在一起,"枚举"一下 API 设计的七宗罪吧。我从未想到自己竟然也会写出这种列表类的文章,但好在我这篇文章的名字有着深刻的宗教意味。
首先,先明确几点:我们这里讨论的是那些成功的,工作得很好的 API。因此,类似"根本无法用"和"有巨大的安全漏洞"和没人用的这类 API 不在我们的讨论之列。不要被标题中的"极度"给吓到了,诚然,根本没法用的 API 非常的失败,但也并没有让开发者极度恼怒的效果。我们这里讨论的是可以工作的那些 API 的一些小细节,那些众所周知的,令人不忍直视的,让开发者恨不得拽头发、摔键盘、爆粗口的,小细节。
文章中要讲到的很多例子都来自于安卓,我并不是对安卓有着特别的挑剔,仅仅是因为这个开发环境最近经常惹恼我而已,很多其他的开发环境或多或少地,也有类似的问题。
烦恼一:API 返回里有个 key 叫 "trsnss"……
是的,我没有故意打错字。不得不承认,命名这件事非常困难,但是,一些基本常识可以解决命名中的大部分问题。我们应该在 Unix 那帮人为了省一次敲击键盘的英雄壮举里得到点儿启发――《如果 dupe 精简成 dup 这个名字,我们为什么还要多打一个 E 呢?》
第二条跟第一条有点关系。
烦恼二:这种函数名不陌生吧,makingNamesMuchTooLongToBePractical
类似的,苹果公司给开发者提供了这么一个函数名:
outputImageProviderFromBufferWithPixelFormat:pixelsWide:pixelsHigh:baseAddress:bytesPerRow:releaseCallback:releaseContext:colorSpace:shouldColorMatch: 烦恼三:滥用别名
嗯,安卓,说得就是你。
显然, "BlankActivity" 和 "EmptyActivity" 这俩函数应该是有所不同的。但不同在哪儿呢?我曾经很清楚,但现在我的脑袋里空空如也(empty),我的意思是,我的大脑一片空白(blank)。
安卓给开发者提供了 tool bar,后来被重命名成了 app bar,还可以叫 action bar,因此我们写出下面的代码也就不足为奇了:
// Set the toolbar as my app bar setSupportActionBar(myToolbar); Read full article from API 设计的七宗罪 - 鸠占鹊巢 - 知乎专栏
No comments:
Post a Comment