代码改变世界

API设计困扰

2011-07-23 19:46  RayLee  阅读(355)  评论(0编辑  收藏  举报

最近对产品的代码设计之道很迷茫,尤其目前的API设计。记得之前阅读过《Practical.API.Design.Confessions.of.a.Java.Framework.Architect》,对什么样的API才是好API和设计出好API的方法略知一二。但毕竟没有亲身体验过API的设计过程,对为什么要遵循那些规则没有深刻体会。如今,我被不良设计带来的烦恼折磨了,虽不能拼一己之力去改变什么,但至少把问题弄清楚,也是一种负责任的态度。于是,我花了2天时间阅读了《API design for C++》,深化下对一些重要概念的理解。

好API所具有的属性:

  • Provide a good abstraction
  • Hide implementation details
  • Minimally complete
  • Easy to use
  • Loosely coupled
  • Stable, Documented, tested

个人感觉,目前的产品违背了其中的大多数。

Stable, Documented, tested ==> 从目前的使用情况来看,肯定是unstable的;Document是有的,但很晦涩;几乎未作testing。

Loosely coupled ==> 感觉到一定的耦合性,但目前并未暴露出与之相关的严重问题。

Easy to use ==> 困难点在于参数的使用,一些参数由很复杂的结构体来定义,即使你不关心一些参数的设定或者使用默认就好,你也要一步步去设定每一个参数,使用起来相当不方便。

Minimally complete ==> 用户随意的一个需求,都成了一个API承诺。这样API会无限膨胀,不受控。

Hide implementation details ==> C语言程序,并未采用面向对象概念,所以是physical hiding。

Provide a good abstraction ==> 这个做的不好,简单明了的功能当然容易抽象,但一些辅助性的该如何抽象得更好,值得思考。

也许你会找理由说,你有特殊的需求,不能满足这些规则。没错,每个项目都有自己的特殊性,你当然可以违背其中的规则,但在违背之前,最好找到充分的理由,否则你的API设计就偏向了正确的设计之道。如果从设计一开始,你就没考虑到好API应该具有的属性,我建议先扩充一些背景知识,再开始实践,尤其对于那些有长远目标的设计。