JAVA如何定义和书写业务级interface代码

下面都是经验之谈,如果有错误或者不对的地方,请多多原谅。。。。。。。时不时会补充

1、打包

既然说到打包,一般你的接口肯定是给别人调用的,所以尽量让你的包纯粹一点,尽可能少的去依赖其他包,毕竟如果别人想用你的接口,然后再排掉一大堆你所依赖的包也是非常麻烦的(有时候你用了高版本的包会对对方的项目产生影响),而且还有个好处,能让对方的项目知道自己的架构里哪些包是自己需要的,而不是当他在做其他项目的时候因为没有用你的接口而不知道少依赖了哪些必要的jar包。

2、定义接口

定义接口都会牵涉到入参和返回值,先说说入参,按照我的经验,一般小等4个入参的都会平铺出来,高于4个的一般就会用对象来设计入参,入参参数很多也很麻烦,不建议一个方法需要塞入5 6个参数,对于返回值,尽量不要设计成没有返回值的void类型的方法,这种方法除了你的接口抛出异常估计调你接口的人永远都不知道你的接口到底执行的怎么样了,也尽量不要返回单一对象,因为你的接口不可能永远都是调成功的,总会有由于参数问题、不符合业务的问题导致你需要告诉对方:对不起,你此次调接口我不能执行,因为种种原因,你得撤销这次调用或者终止流程走下去。所以得定义一个带泛型的返回值。最底下我会放上我项目里设计的返回值,我觉得这种返回值是我最想要的。一般接口返回值都需要去实现Serializable,当然也可以不去实现,不过经常使用你接口的人需要你写的接口可以序列化。
规范:入参和出参最好是两个对象,不要怕麻烦,有好处

3、接口异常

这块我为什么单独提取出来呢,因为我觉得这个需不要需要自己接口捕获异常还是得根据需求,既然是业务接口,尽量不要抛出个异常返回,在自己的代码里去捕获这些异常,自己去返回不同的response,你抛出一个异常给对方,对方也不知道怎么去处理,不过这种情景不适合在分布式项目里对方需要写入数据库当出错时需要事物回滚的,毕竟你都把异常捕获了,别人怎么去回滚?所以,万事没有绝对。在我经验看来,可以自己捕获异常,然后打个日志再把异常抛了,这样既能抛出异常也能让自己项目里有报错的日志。

4、接口的实现

既然定义了接口,你就得有实现啊,实现具体怎么写你得根据需求来,这里只提供我在写实现的经验之谈。首先你得对入参做强校验,返回参数不符合业务需求直接返回失败,并告诉他们参数不符合需求。入参都符合了要求,最好你能把所有的入参用日志打印出来,起码自己需要知道别人调你接口到底传进来了哪些参数,你为什么需要返回给他们那样一个结果,这些都是调试接口时肯定需要的,因为你永远不知道别人调你接口会传什么样子的参数给你,就跟http接口一样,永远不要相信前台传过来的数据。代码里前面对参数做了一些校验,但是有时候参数没问题,状态就有可能出问题了,就比如说别人还没发货呢,你怎么能去做确认收货的操作呢,这些都是隐藏的BUG,你得提前注意,避免这些问题。剩下的就是自己的业务代码了,该返回失败的返回失败,需要事物回滚的回滚。到了该返回的时候你得打印你此次处理的结果的日志,这个能清楚的看到接口的返回结果,不要怕麻烦,都是血淋淋的教训。这里返回都得用上面说的统一的返回值,这样在你返回接口处理失败的时候别人既知道失败也知道为什么这次接口调用失败了。
package com.galaxy.wz.model.api;

import java.io.Serializable;

/**
 * Created by fengyiming on 2016/8/2.
 */
public class ServiceResponse<T> implements Serializable {

    public final static Integer SUCCESS_CODE = 1;

    public final static Integer FAILED_CODE = 0;

    public final static String NULL_MSG = "";

    public final static String PARAM_ERROR_MSG = "参数不完整";

    public final static String SYSYTEM_ERROR_MSG = "系统异常错误";

    /**
     * 响应码
     */
    private Integer code;

    /**
     * 响应消息
     */
    private String msg = "";

    /**
     * 响应数据
     */
    private T data;

    public ServiceResponse() {

    }

    public ServiceResponse(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public ServiceResponse(Integer code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    public boolean isSuccess() {
        return SUCCESS_CODE.compareTo(this.code) == 0;
    }

    public static <T> ServiceResponse<T> failed() {
        return new ServiceResponse(FAILED_CODE, SYSYTEM_ERROR_MSG);
    }

    public static <T> ServiceResponse<T> failed(String msg) {
        return new ServiceResponse(FAILED_CODE, msg);
    }

    public static <T> ServiceResponse<T> systemError() {
        return failed("系统异常");
    }

    public static <T> ServiceResponse<T> paramError() {
        return failed("参数不完整");
    }

    public static <T> ServiceResponse<T> failed(T data) {
        return new ServiceResponse(FAILED_CODE, NULL_MSG, data);
    }

    public static <T> ServiceResponse<T> succeess() {
        return new ServiceResponse(SUCCESS_CODE, NULL_MSG);
    }

    public static <T> ServiceResponse<T> succeessMsg(String msg) {
        return new ServiceResponse(SUCCESS_CODE, msg);
    }

    public static <T> ServiceResponse<T> succeess(String msg, T data) {
        return new ServiceResponse(SUCCESS_CODE, msg, data);
    }

    public static <T> ServiceResponse<T> succeess(T data) {
        return new ServiceResponse(SUCCESS_CODE, NULL_MSG, data);
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值