• 第三方接口调用框架


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

    ###框架结构
    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);
    	
    }
    

      

  • 相关阅读:
    5 Longest Palindromic Substring(easy)
    4 Median of Two Sorted Arrays(medium)
    前言
    3 Longest Substring Without Repeating Characters(medium)
    JavaScript&jQuery学习笔记
    禅道、jenkins部署记录
    jenkins部署自动化项目备注
    pytest
    我的第一个py爬虫-小白(beatifulsoup)
    单元测试python unittest
  • 原文地址:https://www.cnblogs.com/yun965861480/p/11511920.html
Copyright © 2020-2023  润新知