好的API,应该是易于学习、易于使用即使没有文档、很难被误用、易于阅读并且使用它的代码容易维护、足够强大来满足需求、易于扩展。
API设计流程
收集需求-》一个简单的设计说明-》尽早和经常写API-》写服务提供接口比较重要-》维护现实需求
1.一般原则
- API应该只做一件事,并且把它做好
功能应该很容易解释,如果很难命名,一般都是一个坏的信号。一个好的名字驱动开发。容易切分和合并模块。
- API应该设计的尽可能的小,但是也不要太过于小
API应该满足它的需求
- 实现不应该影响API
- 保持最小的可访问性
使类和成员变量尽可能的私有化。公共类不应该有公共字段。最大化信息隐藏。允许模块被独立的使用、理解、构建、测试及调试。
- 命名问题-API是一门小语言
名字应该尽可能的自解释。保持连续性-同一个单词保持同一个含义。尽可能的保持对称。代码应该读起来像散文。
- 虔诚的书写文档
对每一个类、接口、方法、构造方法、参数和异常书写注释文档。
- 考虑API设计的性能
坏的设计会时性能变差。以下几种都是不好的实践:使类型容易变化、提供构造方法而不是静态工厂、使用实现而不是接口。Do not warp API to gain performance(不太理解这句话)
- API必须在任何平台都可用,保持同样的行为功能。
2.类设计
- 最小化可变性
好的设计范例:TimerTask;坏的设计范例:Date Calendar;
- 为继承进行设计并且书写文档,否则禁止继承
继承违反了封装。保守策略:所有的具体类都定义为final的。
坏的设计范例:J2SE库中很多具体的类;好的设计范例:AbstractSet,AbstractMap
3.方法设计
- 使用合适的参数和返回类型
对于输入,参数优先使用接口而不是类(提供灵活性和性能的好处);
使用尽可能具体的输入参数类型,为的是尽早发现错误。(从运行时转移到编译时);
如果存在更好的类型,就不要使用String。String笨重、易于出错、缓慢。
不要使用浮点类型在货币值上,因为会导致不精确的结果。
使用double(64bits),不适用float(32bits)。可以提高精度。
- 在方法中使用一致的参数顺序
java.util.Collections-第一个参数经常是被修改或者查询的collection。
java.util.concurrent-时间一般会被定义为 long delay,TimeUnit unit。
- 避免长参数列表
理想情况是三个或者更少。相同类型的长参数列表是有害的,编程人员容易错误的传递参数。有两种技术可以减少参数列表长度:分解方法,创建辅助类来保存方法。
- 返回零长度的数组或者空集合类,而不是null
4.异常设计
- 抛出异常表明异常发生的条件
不要强迫客户端使用异常来控制条件流向,不要安静的失败。
- 非受检异常优先
受检异常-客户端必须采取恢复动作,非受检异常-程序错误。
- 异常中包含错误捕获信息。
5.重构API设计
相关推荐
依托ASP.NET Web API阐述API设计与开发的通用技术,是一本全面介绍如何构建真实可演化API的实践指南。本书共分三部分。第一部分介绍Web/HTTP和API开发的基础知识,介绍ASP.NET Web API,为初学者以及想充分利用HTTP...
他为.NET Framework设计了多个API,还开发了FxCop等框架开发工具。目前,他正致力于在微软内部开发推广设计规范,将其应用到.NET Framework中,同时负责核心.NET Framework API的交付。 :Krzysztof Cwalina 微软公司...
他为.NET Framework设计了多个API,还开发了FxCop等框架开发工具。目前,他正致力于在微软内部开发推广设计规范,将其应用到.NET Framework中,同时负责核心.NET Framework API的交付。 :Krzysztof Cwalina 微软公司...
软件框架设计的艺术 捷克 jaroslav lulach著,王磊,朱兴译
他为.NET Framework设计了多个API,还开发了FxCop等框架开发工具。目前,他正致力于在微软内部开发推广设计规范,将其应用到.NET Framework中,同时负责核心.NET Framework API的交付。 :Krzysztof Cwalina 微软...
他为.NET Framework设计了多个API,还开发了FxCop等框架开发工具。目前,他正致力于在微软内部开发推广设计规范,将其应用到.NET Framework中,同时负责核心.NET Framework API的交付。 :Krzysztof Cwalina 微软公司...
他为.NET Framework设计了多个API,还开发了FxCop等框架开发工具。目前,他正致力于在微软内部开发推广设计规范,将其应用到.NET Framework中,同时负责核心.NET Framework API的交付。 :Krzysztof Cwalina 微软公司...
他为.NET Framework设计了多个API,还开发了FxCop等框架开发工具。目前,他正致力于在微软内部开发推广设计规范,将其应用到.NET Framework中,同时负责核心.NET Framework API的交付。 :Krzysztof Cwalina 微软公司...
面向对象设计另外一个目标就是能产生很多的有关联的类,可以让软件的再开发变得简 单。举例来说,很多软件工程都有同样的功能,尤其是很多应用了同一原理组织的软件工 程。软件的二次开发者想自己为软件开发插件以...
通过Win32 API,Windows NT以及Windows 95都可以支持多线程程序设计,但是这个重要主题的信息却极稀有而不够详尽。 在《Win32多线程程序设计》这本书中,Jim Beveridge和Robert Wiener告诉你什么时机、什么地点、...
通过Win32 API,Windows NT以及Windows 95都可以支持多线程程序设计,但是这个重要主题的信息却极稀有而不够详尽。 在《Win32多线程程序设计》这本书中,Jim Beveridge和Robert Wiener告诉你什么时机、什么地点、...
而 Visual Basic 则是应用面向对象的程序 设计方法(OOP),把程序和数据封装起来作为一个对象,并为每个对象赋予应有 的属性,使对象成为实在的东西。在设计对象时,不必编写建立和描述每个对象 的程序代码,而是用...
Programmer's Guide(本文档所以翻译的部分,主要从框架的设计方面介绍) XML Processing Guide(对XML数据模型处理的介绍) Reference(FreeMarker 的参考文档,语言使用介绍) 中文翻译之所以选择 ...
总之,此次论文的写作过程,我收获了很多,即为大学三年划上了一个完美的句号,也为将来的人生之路做好了一个很好的铺垫。 参考文献 参考资料: 《Visual Basic程序设计教程》 何瑞麟 科学出版社 《Visual Basic与...
本课题设计的目标是实现一个基于Struts2框架的电子商城网站。论文先介绍了开发项目所用到的关键技术,接着从用户需求、经济和技术等三个方面对系统进行分析。在概要设计中,根据系统分析的结果,把系统分为前台和...
第一部分(第1~2章)阐述ApacheZooKeeper这类系统的设计目的和动机,并介绍分布式系统的一些必要背景知识。第1章介绍ZooKeeper可以做什么,以及其设计如何支撑这些任务。第2章介绍基本概念和基本组成模块,并通过...
map侧过滤后在reduce侧联结5.3 创建一个Bloom filter5.3.1 Bloom filter做了什么5.3.2 实现一个Bloom filter5.3.3 Hadoop 0.20 以上版本的Bloom filter5.4 温故知新5.5 小结5.6 更多资源第6 章 编程实践6.1 开发...
Java ME为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用 程序提供一个健壮且灵活的环境,它包括灵活的用户界面、健壮的安全模型、许多内置 的网络协议以及对可以动态下载的连网和离线...