最近给公司写了一套第三方接口调用的框架,为了规范并帮助业务稳定的允许,特写了这个框架。

###框架结构 Invoker.invoking 门面 -BizService 业务接口 -BizAOPService 业务切面 +invoking 业务接口调用 BizService.check 参数检查 BizService.pre 业务前置调用 BizAOPService.pre 业务切面前置调用 BizService.execute 业务调用 BizAOPService.after 业务切面后置调用 BizService.after 业务后只调用 BizService.handlerException 异常处理
框架结构实际很简单,只是将相同的东西模板化,不明确的东西抽象化,不能主导的东西桥接出去。
参数适配器
import java.io.Serializable;
public interface RequestAdaptor<T> extends Serializable {
/**
* 参数适配
*/
PayRequest<T> adapt();
/**
* 参数检查
*/
void check();
}
实际这里我完全可以将 BizAOPService 放入一个集合形成类似拦截器一样的存在,这里看具体的需求了。
public interface Invoker<M,N> {
void invoking(BizService<M,N> bizService, BizAOPService<M,N> bizAOPService, M m, N n) throws Exception ;
}
public interface BizService<M,N> {
/**参数校验*/
void check(M request, N response);
/**调用前处理 如内置参数组装,更新业务状态*/
void pre(M request, N response);
/**接口调用*/
void execute(M request, N response);
/**调用后处理 更新业务状态*/
void after(M request, N response);
/**参数校验异常处理 */
void checkException(M request, N response, Exception e) throws Exception ;
/**调用前异常处理*/
void preException(M request, N response, Exception e) throws Exception ;
/**调用异常处理*/
void executeException(M request, N response, Exception e) throws Exception ;
/**调用后异常处理*/
void afterException(M request, N response, Exception e) throws Exception ;
}
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class AbstractBizService<M,N> implements BizService<M,N>{
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractBizService.class);
@Override
public void check(M request, N response) {
LOGGER.info("接口调用参数检查:{},{}", request, response);
}
@Override
public void pre(M request, N response) {
LOGGER.info("调用前处理:{},{}", request, response);
}
@Override
public void after(M request, N response) {
LOGGER.info("调用后处理:{},{}", request, response);
}
@Override
public void checkException(M request, N response, Exception e) throws Exception {
LOGGER.info("接口调用参数检查异常处理:{},{}", request, response, e);
throw e;
}
@Override
public void preException(M request, N response, Exception e) throws Exception {
LOGGER.info("调用前异常处理:{},{}", request, response, e);
throw e;
}
@Override
public void executeException(M request, N response, Exception e) throws Exception {
LOGGER.info("接口调用异常处理:{},{}", request, response, e);
throw e;
}
@Override
public void afterException(M request, N response, Exception e) throws Exception {
LOGGER.info("调用后异常处理:{},{}", request, response, e);
throw e;
}
}
public interface BizAOPService<M,N> {
void pre(M request, N response);
void after(M request, N response);
String getBizNo(M request);
}