好的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构建音乐播放应用,...
这是最简单的神经网络结构之一,数据只沿着一个方向流动,即从输入层到输出层。前馈神经网络通常用于简单的模式识别任务。 #### 2. 循环神经网络 (RNN) 循环神经网络允许信息在网络内部循环流动,这使得它们非常...
FreeRTOS是一个实时操作系统内核,专为微控制器设计,它广泛应用于嵌入式系统领域。FreeRTOS V9.0.0 API中文手册对FreeRTOS的编程接口提供了详细的中文解释和使用示例,方便中文用户理解和使用FreeRTOS提供的各种...
- 要使用Microsoft Translate API,首先需要访问Bing开发人员中心([http://cn.bing.com/developers](http://cn.bing.com/developers)),注册一个应用并获取一个Application ID。 - 按照页面提示填写必要的信息,...
总的来说,创建一个Qt编写的英译汉词霸是一个涉及界面设计、数据库操作、网络通信和本地化处理等多个方面的综合项目。它不仅能提升开发者对Qt框架的理解,也有助于提高C++编程和软件工程实践的能力。
多线程是现代计算机程序设计中的一个重要概念,它允许一个应用程序同时执行多个任务。在Win32环境下,通过创建和管理线程,开发者可以提高程序的并发性和响应性。书中首先介绍了线程的基本概念,包括线程的创建、...
1. **线程创建**:在Win32 API中,通过调用`CreateThread`函数创建一个新的线程。这个函数需要传入线程函数的地址,线程函数将在新线程中运行。线程函数的返回值通常用来表示线程执行的结果。 2. **线程同步**:在...
《用Visual C++设计Win32应用程序》是一个深入探讨如何使用Microsoft Visual C++开发Windows桌面应用程序的教程。这个教程可能是由网上某个知名资源站点提供的原版资料,旨在帮助程序员理解和掌握Win32 API编程。 ...
在Win32 API中,可以使用`CreateThread`函数来创建一个新的线程。这个函数接收一系列参数,包括线程函数的地址、传递给线程函数的参数、初始线程堆栈大小等。线程函数是一个在新线程中运行的函数,类似于主函数,但...
多线程编程是软件开发中的一个重要领域,尤其在需要同时处理多个任务或提升系统性能时,多线程技术显得尤为关键。以下是对该书可能涉及的知识点的详细阐述: 1. **线程概念**:线程是程序执行的基本单元,是进程...
在IT行业中,翻译工具是必不可少的,特别是在全球化的今天,多语言之间的沟通变得...对于学习Python和NLP的开发者来说,这是一个很好的实践项目,能够帮助他们提升相关技能,同时也满足了日常生活中跨语言交流的需求。
依托ASP.NET Web API阐述API设计与开发的通用技术,是一本全面介绍如何构建真实可演化API的实践指南。本书共分三部分。第一部分介绍Web/HTTP和API开发的基础知识,介绍ASP.NET Web API,为初学者以及想充分利用HTTP...
1. **CreateThread**:这是Windows API中最基本的创建线程的函数,它接收一个函数指针作为新线程的入口点,创建一个新的线程并开始执行该函数。 2. **TerminateThread**:用于强制终止一个线程,但应谨慎使用,因为...
这个Android应用是一个基础的英汉词典,设计用于学习和参考。它展示了如何在Android平台上构建一个具有简单用户界面的应用,...同时,这也是一个很好的实践平台,用于提升问题解决能力、代码组织能力和团队协作技巧。
"caiyun:彩云小译 crx" 是一个基于JavaScript技术的浏览器扩展程序,主要用于提供便捷的翻译服务。彩云小译是由阿里云开发的一款智能翻译工具,它以其准确、快速的翻译能力受到用户的欢迎。CRX是Chrome浏览器扩展...
因此,专门服务于程序员群体的“英汉快译工具”应运而生,为他们提供了一个实用的翻译解决方案。 首先,“英汉快译工具”的设计初衷是为了帮助那些英语水平有限但在技术领域需要频繁使用英文资料的程序员。许多...
线程是操作系统中的一个基本执行单元,它与进程内的其他线程共享同一地址空间和资源。在Win32 API中,可以通过CreateThread函数创建新线程。这个函数需要提供线程函数的入口点、参数、初始堆栈大小以及线程的优先级...
对照阅读英文版和中文版,不仅可以加深理解,还能提升英语阅读能力,尤其对于那些需要阅读英文技术文档的IT专业人士来说,这是一个极好的学习资源。 总的来说,《Linux内核设计与实现》第三版是一本全方位剖析Linux...
API,全称为Application Programming Interface,中文译为应用程序编程接口,是操作系统提供给应用程序的一系列预定义函数的集合,用于实现特定功能。在Windows平台上,这被称为WIN32 API,即针对32位Windows操作...