设计一个好的接口

一个程序员问禅师?”什么是好的接口“,

image

接口的功用和翻译类似(人和系统的界面层,沟通的媒界),信,达,雅也许是一个指导,

信,当然指正确性,可用性,

达,能够符合惯用法,可以被人容易理解和使用,

雅,做到对于系统特色在界面上的升华,能够反映系统特色,让人用得舒服,

对于第三点展开一下,我对于“雅” 接口的看法,

  1. 高性能是不是雅?

    比如说,古早的win32 API是一种面向系统性能的设计,在使用时,它经常要求你构造一个非常细节的数据结构(精细到字节及至位级别),

    时至今日,我以为这种作法不再是好的,不,是当年,我就因为 windows API, 视学习编程为畏途,

    win32 API 后出现了 Dephi, 第一个被大家誉为能够快速开发,快乐写系统代码的win32 开发框架, 它提供了较高层次,看上去没那么高效的API,

    接着有 Java SDK, 一个较好理解和可用的系统级API, 然后是.net SDK, 大家都发现较高层的系统API,没产生什么性能影响,

    更不用说,现在直接传json啊,字串啊之类的脚本API,

    那性能是否还需要重视?这依据是更接近系统,还是更接近终端用户层面,也即你的用户是谁

  2. 你的接口为谁而用?
    你需要把接口理解成产品功能,想象自己是用户,问以下几个问题,

    多快能上手API?

    一个语法不通的名字,会不会影响用户心情?

    文档在哪?例子在哪?

  3. 只写接口就行了吗?
    一个稍有点复杂度的系统,没人能够看接口就会用,

    看了不一定会用,
    用了不一定会对,
    对了还可以有更好的用法,
    你需要写文档,也需要写好例子,告诉用户推荐的用法

    那么找文科生,产品,定义接口就好了吧?
    并不是,你需要考虑接口的 完备性,正交性,安全性,性能 ( 法老不懂爱,文科同学不懂hello world)
    接口,有着理论性的指导

  4. 作为理论层面的接口
    完备性
    (wikipedia词条,完备性) 在数学及其相关领域中,一个对象具有完备性,即它不需要添加任何其他元素,这个对象也可称为完备的完全的。更精确地,可以从多个不同的角度来描述这个定义,同时可以引入完备化这个概念。但是在不同的领域中,“完备”也有不同的含义,特别是在某些领域中,“完备化”的过程并不称为“完备化”,另有其他的表述,请参考代数闭域紧化哥德尔不完备定理
    换句大白话说,接口不多也不少,它恰好实现了需求,
    正交性
    (wikipedia词条,正交) 正交是垂直这一直观概念的推广
    定义一个2D坐标,一个点只有一种精确定义(X,Y) 你有没有感觉,实现一个业务,可以用好几种不同的方式?
    你有没有感觉,有两个接口完成了类似的事情,存在交集?
    安全
    并不容易做到,实际很多API也没有做到,
    你任意调用API序列,可能出现UB(undefined behavior),甚至异常,
    但还是要尽量达到,至少有良好的报错,
    性能
    c++ STL容器有好几种规格,它为啥不像 脚本语言一样,只提供一个 [], 数组,map就足够了,
    因为它面向系统开发,它的用户是系统程序员,在不同场景下,性能指标影响他们对特定接口的选择,
    比如说,都满足 random access container, 但作为 vector, 和 list ,他们在插入,删除,查找等存在算法上的巨大差异,
    这些在接口注释文档里都标记得很详细

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335