具有美感的API设计

原文链接:Beautiful API Design

当我第一次开始用java编程,我就很喜爱这门语言了。我之前是用Pascal,Delphi,Visual Basic和C语言编程的,但是java语言是如此的与众不同和优雅。另外,它的语言结构、特性和API集是如此的特别。由于它充满美学的设计,用Java编程是一件很愉快的事,这是我在用其他语言编程时没有过的。在我们使用API集时,有时会感到愉快,有时也会感到痛苦。我们在开发环境中用了不同的框架和库,这些框架和库又有很多API集。API之美取决于设计者的知识和设计能力(也叫艺术能力)。
在开发一套API,用户界面或者一个产品时,我们使用以下的原则(含有以下这些特性的可以称得上是“美”):

简单

API应该很简单就能达到程序员的期望。没有多余的行,没有多余的方法,没有多余的参数。它应该只包括你现在和将来所需要的东西。如果你在开发API,你应该反复问自己“我能不能在没有丢失功能的情况下精简API呢?”。

可维护性

如果我提供这套API,我是否可以保证它没有任何问题呢?在将来的开发是否任何的改变都会令它贬值?某些API可能会在引入到其他程序中时会埋下隐患,其中的一些更可能会暴露出错误。当发布一套API时,API的用途应该要被仔细考虑。API的用户有时会在你从未想过的情况去使用它。

美感

如果我们相信软件开发是一门艺术,那么美感是其中最重要的一个方面。物理世界中用货物或者东西去设计和组成美感。我们同样地用API而非材料去设计和组成软件。为了具有美感,API应该是一致的,应该选择最好的命名,理解函数的成本应该是极小的,在使用API时会令人感到很舒服。

功能

一套API集应该要解决尽可能多的问题。有时候我们会发现相似的需求被分散到不同的API中,然而可能一套API已经是足够了的。这个主题与效率稍微有点关联。API设计应该提供最大程度的可重用性。一套API集应该以最少的代码提供尽可能多的功能。我们每天阅读很多代码,发现很多公式化的代码(烂代码)存在于某些框架和API集中。

一致性

相同的问题应该用相同的方法和态度去解决。你的API的行为改变类和包。你应该在你的API集里使用相同的模式即使对于相同的问题已经有很多模式了。例如,你在你的API集里应该要用相同的异常管理风格。


要设计“具有美感的API”,设计者应该要考虑一下的点:

1-保持简单。在满足当下所需的同时也要考虑将来扩展时可能的要求。API应该要比较容易去理解。

2-API设计者必须通过阅读和持续地写代码来发展和加强自己的编程技能。要尽可能多地学习设计模式,API设计原则和面向对象原则。如果可能的话,你的技能应该被认证机构认证。这会加深关于技能开发的一些客观概念。

3-在设计API时,API开发,推出市场,运行时资源消耗,用户(程序员)教育和技术支持的成本必须小心仔细的考虑和计划。

4-在深入钻研API设计前,应该先做技术分析和调查。相关的参考应该是调查和检查笔记。先阅读调查文档在开始API设计。为了设计更好的API,可以阅读一下其他的一下相似的API。如果参考调查没有完成的话,“造轮子”将没完没了。

5-如果API设计需要很多工作而又没有实际的好处,那么应该要避免。这对API设计者和用户都将会是一个很危险的状况,API应该要暂时暂停,可能有必要建立一个工作室。在退出API到市场后,应该要监控从程序员反馈回来的“臭气”。

6-“命名”应该要小心地做。命名是API设计之中最重要的方面。每一个名字(数据表-列,类,方法,成员和参数)都应该想给一个新生儿取名一样地去考虑。名字必须能被以相关的语义去搜索到。

7-如果可能的话,API设计应该先被同行复查。

8-API应该在一个参考的场景被测试和使用。

9-API应该能在没有任何配置或者维护的情况下被使用(零维护)。

10-未被使用的API应该要从API集里移除。任何“死的”API会在将来迷惑API设计者和用户。

11-API应该是文档化的以及在尽可能多的地方去使用。有时可能是强制使用。

12-API应该要具体的去设计,令它不用在之后的新版本发布时改变。

互联网上有很多很好的关于API设计的文章。我推荐以下的资源给API设计者:
http://www.infoq.com/presentations/effective-api-design
http://video.google.com/videoplay?docid=-474821803269194441
http://blogs.msdn.com/kcwalina/archive/2007/03/29/1989896.aspx
http://www.artima.com/forums/flat.jsp?forum=106&thread=142428

http://www.amazon.com/Practical-API-Design-Confessions-Framework/dp/1430209739
http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321545613/ref=sr_1_1?ie=UTF8&s=books&qid=1227599123&sr=1-1
http://www.amazon.com/Beautiful-Code-Leading-Programmers-Practice/dp/0596510047

猜你喜欢

转载自blog.csdn.net/u012082017/article/details/51037303