API 设计的七宗罪 - 鸠占鹊巢 - 知乎专栏



API 设计的七宗罪 - 鸠占鹊巢 - 知乎专栏

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

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts