标签:
在大公司里工作,业务都已经拆分掉,必然用服务化中间件来将各个业务的服务串联起来,那很显然,你会调用别人的接口,或者你的系统本身也要提供一些接口出去,我只是根据我的感受简单说一下,接口设计中的注意事项
一般情况下,我们都用maven来管理项目,对外接口一般会放到一个独立的模块中,暴露出去;所以第一点要注意的是,这个独立的module尽可能不要依赖任何第三方jar,更不用说那些很重的框架或者别的业务方的jar,因为这种反例我见过太多了,我不想在这里吐槽,因为这实在太糟糕了,我们一直强调弱依赖,低耦合,这是做任何设计的基本要求,做接口给人用当然不例外,最好的接口包就只依赖jdk的基本类就行了,然后自己定义很多DO对象随你的便;但这也不是绝对的,有时候别人希望你提供富客户端接口,这时候你需要在你的包里面做各种封装和调用,那很显然,这种富客户端就会依赖很多其他东西,但我是觉得这最好是特定业务特定使用,别搞成通用的,很容易包冲突,我可不希望自己提供的东西最后让别人花大量的时间去做那种排除冲突的恶心事情
然后就是接口本身的设计了,这里面也不是绝对的,一般我们会按业务划分包,然后每个包里横向或者纵向划分一下接口,定义出几个service之类的,这个不是绝对的哈,根据个人情况,但有一点是,每个service中的函数,概念和纬度必须是统一的,这个约定大家要做好,否则就乱套了
接口函数的设计,首先命名要做到通俗易懂,函数上边要做详细注释,函数入参,如果参数很多的话,建议分成几类,包装成几个对象来做,不建议所有参数包装成一个对象,这样对于使用者来说比较蛋疼,好的入参,一般会一目了然,我曾经就做过把所有参数都写到一个类里面封装,结果用起来很不爽
接口返回值,建议使用泛型定义,例如:
Result<T>{
boolean success
T Data
int code
String message
}
这四个参数会包含接口是否调用成功,业务对象,错误码code和错误信息等,然后你根据不同的返回值,定义n多Data对象随你的便
看一个接口:
public Result<MobileDO> getMobile(long userId,ClientInfo clientInfo);
public Result<MobileDO> getMobile(String username,ClientInfo clientInfo);
public Result<MobileDO> getMobile(String username,MobileParam param,ClientInfo clientInfo);
大家想想,如果每个人都保持严谨的态度去给人提供服务,那我们就不会花如此多的时间去排除jar,排查冲突,我们不应该在这种事情上浪费太多时间,请大家都养成良好的习惯,做东西时,多考虑使用者的感受,一定要多想想
标签:
原文地址:http://my.oschina.net/glarystar/blog/471471