Java API设计CheckList
API设计原则:正确、好名、易用、易学、够快、够小。但我们从来不缺原则,〜〜〜
Interface
1.The Importance of Being Use Case Oriented,一个接口应当是一组方法的集合,方法是否能放在一起、最重要的依据是通过用测和使用场景去判断。更具体地是The Input Params Oriented,输入参数一定与接口相关。
2.you can't know what users of your API will do with it.但了解接口的可能调用者情况,预测使用场景,考虑性能压力。使用场景包括:WHO、WHY、WHERE、WHEN、HOW等,e.g.[APP团购单详情页][为了获取商户详情][在团购列表页][当该用户未购买过该团购单时][通过传Enum.Type.Mobile&shopId方式]调用shpinfo.bin接口。性能压力,各渠道调用QPS等。另外还需考虑线程安全,如synchronized等。
3.版本控制。 bring out one or more 0.x versions. create a new API with different package names. 不稳定版本、采用小号方式,让用户知道”我是坏人“。如果历史包袱太重,那就干脆换个包,令新、旧API和谐共存。另外,你永远都可以新增API,但永远都不能删除。
4.考虑提供批量处理方法,批处理可以有效减少网络传输、增加处理效率等。应当在批处理之前定义单个操作。
5.接口应该保证幂等性,异步调用超时、可保证重复调用,如AddConsum(serialNo, user, product, money),增加serialNo避免重复提交。
6.屏蔽底层实现细节。不要过度地具体说明方法的行为,如:用Map、List替换HashMap、ArrayList等,Exceptions should usually be unchecked。
Class
7.接口类使用到的所有实体类/Bean等类,为之提供无参数的构造函数。 一些框架如hessian需要bean有无参的构造函数。
8.接口方法中避免重载的方法,即避免有两个方法同名,重载的方法一个方面在hessian接口调用会有问题(其他协议的远程接口可能也有问题),另一个方面同名的方法影响代码可读性。 比如这样的接口是不合适的。
9.接口中用到的自定义类, 实现序列化接口,提供toString()方法; Java要提供toString()方法,并继承Serializable接口,生成Serial Verion UID。考虑实现Comparable等接口。
10.禁止使用继承,在实现类前加final关键字。继承违反了encapsulation特性,子类必须知道父类的实现特性。
Method
11.采用合适的参数和返回数据类型。如:使用BigDecimal或double代替float(32bit),使用更加灵活的接口数据类型作为输入参数,尽量使用Enum代替String作为类型区分参数等。
12.避免过长的参数列表,专家建议不超过3个,欢迎拍砖。有两种技术避免过长参数:a.将一个多个步聚的方法拆分细化,b.创建包含这些参数的帮助类。
13.避免集合返回NULL,应当返回空对象。但对于单个对象,如果空对象不能够方便地表达“值为NULL”的状态,则返回NULL。
附:
GOOGLE首席软件工程师Joshua Bloch:《How to Design a Good API and Why it Matters》《深入JAVA虚拟机》的作者Bill Venners:《Interface Design》
Java API设计CheckList的更多相关文章
- (转)Java API设计清单
转自: 伯乐在线 Java API设计清单 英文原文 TheAmiableAPI 在设计Java API的时候总是有很多不同的规范和考量.与任何复杂的事物一样,这项工作往往就是在考验我们思考的缜密程度 ...
- 在Java API设计中,面向接口编程的思想,以及接口和工厂的关系
现在的java API的设计中,提倡面向接口的编程,即在API的设计中,参数的传递和返回建议使用接口,而不是具体的实现类,如一个方法的输入参数类型应该使用Map接口,而不是HashMap或Hashta ...
- Java API设计原则清单
在设计Java API的时候总是有很多不同的规范和考量.与任何复杂的事物一样,这项工作往往就是在考验我们思考的缜密程度.就像飞行员起飞前的检查清单,这张清单将帮助软件设计者在设计Java API的过程 ...
- paip.web数据绑定 下拉框的api设计 选择框 uapi python .net java swing jsf总结
paip.web数据绑定 下拉框的api设计 选择框 uapi python .net java swing jsf总结 ====总结: 数据绑定下拉框,Uapi 1.最好的是默认绑定..Map(k ...
- Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net
Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net 1. Base64编码, 1 1.1. 子模式 urlsafe Or url ...
- Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net
Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net 1. Base64编码,1 1.1. 子模式 urlsafe Or url u ...
- RESTful API 设计最佳实践
背景 目前互联网上充斥着大量的关于RESTful API(为了方便,以后API和RESTful API 一个意思)如何设计的文章,然而却没有一个"万能"的设计标准:如何鉴权?API ...
- RESTful API 设计指南 (转)
RESTful API 设计指南 2016-02-23 ImportNew (点击上方公号,可快速关注) 作者:阮一峰 链接:http://www.ruanyifeng.com/blog/2014/0 ...
- 优秀API设计的十大原则
优秀API设计的十大原则 2015-09-23 分类:编程开发.设计模式.首页精华暂无人评论 分享到:更多4 二十万年薪PHP工程师培养计划 成为被疯抢的Android牛人 风中叶讲Java重难 ...
随机推荐
- 13年山东省赛 Mountain Subsequences(dp)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Mountain Subsequences Time Limit: 1 Sec ...
- 理解Python中的装饰器
文章先由stackoverflow上面的一个问题引起吧,如果使用如下的代码: @makebold @makeitalic def say(): return "Hello" 打印出 ...
- WebSocket 简介
在HTML5规范中,我最喜欢的Web技术就是正迅速变得流行的WebSocket API.WebSocket提供了一个受欢迎的技术,以替代我们过去几年一直在用的Ajax技术.这个新的API提供了一个方法 ...
- vc++ ODBC
http://book.51cto.com/art/200807/80054.htm http://www.cnblogs.com/xrong/archive/2013/04/14/3020240.h ...
- scheme Continuation
Continuation Pass Style在函数式编程(FP)中有一种被称为Continuation Passing Style(CPS)的风格.在这种风格的背后所蕴含的思想就是将处理中可变的一部 ...
- zhihu spark集群,书籍,论文
spark集群中的节点可以只处理自身独立数据库里的数据,然后汇总吗? 修改 我将spark搭建在两台机器上,其中一台既是master又是slave,另一台是slave,两台机器上均装有独立的mongo ...
- 关于找不到stdafx.h头文件问题
代码: #include "stdafx.h" #include "stdlib.h" char* getcharBuffer() { return " ...
- UESTC_Judgment Day CDOJ 11
Today is the judgment day. The world is ending and all man will pay for their guilt and sin. Now the ...
- hdu 5493 Queue(线段树)
Problem Description N people numbered to N are waiting in a bank for service. They all stand in a qu ...
- A Corrupt Mayor's Performance Art(线段树区间更新+位运算,颜色段种类)
A Corrupt Mayor's Performance Art Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 100000/100 ...