热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

具有美感的API设计

原文链接:BeautifulAPIDesign当我第一次开始用java编程,我就很喜爱这门语言了。我之前是用Pascal,Delphi,VisualBasic和C语言编程的,但是ja

原文链接: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


推荐阅读
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • IT方面的论坛太多了,有综合,有专业,有行业,在各个论坛里混了几年,体会颇深,以前是论坛哪里人多 ... [详细]
  • 本文介绍了自动化测试专家Elfriede Dustin在2008年的文章中讨论了自动化测试项目失败的原因。同时,引用了IDT在2007年进行的一次软件自动化测试的研究调查结果,调查显示很多公司认为自动化测试很有用,但很少有公司成功实施。调查结果表明,缺乏资源是导致自动化测试失败的主要原因,其中37%的人认为缺乏时间。 ... [详细]
  • 2022年的风口:你看不起的行业,真的很挣钱!
    本文介绍了2022年的风口,探讨了一份稳定的副业收入对于普通人增加收入的重要性,以及如何抓住风口来实现赚钱的目标。文章指出,拼命工作并不一定能让人有钱,而是需要顺应时代的方向。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 本文讲述了作者从最初对软件工程的选择迷茫到逐渐喜欢并坚持学习的经历。作者在大学期间通过学习专业课和参与项目开发,不断挑战自己并取得成就感。虽然曾考虑过转专业和复读,但最终决定坚持学习软件工程,并为自己的未来努力奋斗。作者还提到了大学生活与自己最初的预期不同,但对此并没有太多抱怨。 ... [详细]
author-avatar
双子座-海_358
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有