好的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设计
相关推荐
在IT行业中,JavaScript是一种广泛使用的前端...对于学习JavaScript和API应用的开发者来说,这是一个很好的实践案例。通过深入研究这个项目,你可以更深入地理解API调用的原理,以及如何结合前端技术创建交互式应用。
API-song,可能是指一个与音乐相关的API,可能是用于获取歌曲信息、播放音乐、创建播放列表等功能。这样的API可能需要提供搜索歌曲、获取歌词、控制播放状态等多种接口。开发者可以通过这个API构建音乐播放应用,...
这份技术资料详细翻译了Zigbee协议栈中OSAL层的API函数,不仅包含了函数的名称、参数、返回值等基本信息,还针对每一个API提供了详细的使用场景说明和代码示例。这对于希望深入理解和运用Zigbee技术的工程师和技术...
对照阅读英文版和中文版,不仅可以加深理解,还能提升英语阅读能力,尤其对于那些需要阅读英文技术文档的IT专业人士来说,这是一个极好的学习资源。 总的来说,《Linux内核设计与实现》第三版是一本全方位剖析Linux...
FreeRTOS是一个实时操作系统内核,专为微控制器设计,它广泛应用于嵌入式系统领域。FreeRTOS V9.0.0 API中文手册对FreeRTOS的编程接口提供了详细的中文解释和使用示例,方便中文用户理解和使用FreeRTOS提供的各种...
这是最简单的神经网络结构之一,数据只沿着一个方向流动,即从输入层到输出层。前馈神经网络通常用于简单的模式识别任务。 #### 2. 循环神经网络 (RNN) 循环神经网络允许信息在网络内部循环流动,这使得它们非常...
总的来说,创建一个Qt编写的英译汉词霸是一个涉及界面设计、数据库操作、网络通信和本地化处理等多个方面的综合项目。它不仅能提升开发者对Qt框架的理解,也有助于提高C++编程和软件工程实践的能力。
- 要使用Microsoft Translate API,首先需要访问Bing开发人员中心([http://cn.bing.com/developers](http://cn.bing.com/developers)),注册一个应用并获取一个Application ID。 - 按照页面提示填写必要的信息,...
《用Visual C++设计Win32应用程序》是一个深入探讨如何使用Microsoft Visual C++开发Windows桌面应用程序的教程。这个教程可能是由网上某个知名资源站点提供的原版资料,旨在帮助程序员理解和掌握Win32 API编程。 ...
在Win32 API中,可以使用`CreateThread`函数来创建一个新的线程。这个函数接收一系列参数,包括线程函数的地址、传递给线程函数的参数、初始线程堆栈大小等。线程函数是一个在新线程中运行的函数,类似于主函数,但...
在IT行业中,翻译工具是必不可少的,特别是在全球化的今天,多语言之间的沟通变得...对于学习Python和NLP的开发者来说,这是一个很好的实践项目,能够帮助他们提升相关技能,同时也满足了日常生活中跨语言交流的需求。
依托ASP.NET Web API阐述API设计与开发的通用技术,是一本全面介绍如何构建真实可演化API的实践指南。本书共分三部分。第一部分介绍Web/HTTP和API开发的基础知识,介绍ASP.NET Web API,为初学者以及想充分利用HTTP...
这个Android应用是一个基础的英汉词典,设计用于学习和参考。它展示了如何在Android平台上构建一个具有简单用户界面的应用,...同时,这也是一个很好的实践平台,用于提升问题解决能力、代码组织能力和团队协作技巧。