一个简单的后端服务框架

来源:互联网 发布:郑州市网络监督局电话 编辑:程序博客网 时间:2024/06/05 07:58

1、该框架基于springweb开发;

2、该框架是自己实践经验的总结,适用于有固定流程的业务系统,包括:参数校验、参数初始化、业务校验、业务执行;

3、该框架未做并发处理测试;

4、该框架将不断完善;

5、该框架主要优点是代码和业务逻辑的分类,使代码可读性更高,例如想要添加一个业务接口,只需增加一个类T1001.java继承抽象类MainBusiness.java即可,所有的业务逻辑在T1001.java各自的方法中实现即可;

项目结构:

项目代码:

package com.kkdev.business.user;import org.springframework.stereotype.Component;import com.kkdev.business.MainBusiness;import com.kkdev.domain.TransBean;@Componentpublic class T1001 extends MainBusiness {@Overridepublic void initParams(TransBean transBean) {System.out.println("参数初始化--------------");}@Overridepublic void checkParams(TransBean transBean) {System.out.println("参数校验--------------");}@Overridepublic void checkBusiness(TransBean transBean) {System.out.println("业务检查--------------");}@Overridepublic void doBusiness(TransBean transBean) {System.out.println("业务逻辑执行--------------");}}
package com.kkdev.business;import com.kkdev.domain.TransBean;/** * 业务流程控制 *  * @author zhouy * */public interface BaseBusiness {/** * 初始化 *  * @param transBean */void initParamsSupper(TransBean transBean);/** * 参数校验 *  * @param transBean */void checkParamsSupper(TransBean transBean);/** * 业务校验 *  * @param transBean */void checkBusinessSupper(TransBean transBean);/** * 业务逻辑 *  * @param transBean */void doBusinessSupper(TransBean transBean);}
package com.kkdev.business;import com.kkdev.domain.TransBean;public abstract class MainBusiness implements BaseBusiness {public final void doService(TransBean transBean) {this.initParamsSupper(transBean);this.checkParamsSupper(transBean);this.checkBusinessSupper(transBean);this.doBusinessSupper(transBean);}public void initParamsSupper(TransBean transBean) {System.out.println("【公共】参数初始化。。。");initParams(transBean);}public void checkParamsSupper(TransBean transBean) {System.out.println("【公共】参数校验。。。");checkParams(transBean);}public void checkBusinessSupper(TransBean transBean) {System.out.println("【公共】业务校验。。。");checkBusiness(transBean);}public void doBusinessSupper(TransBean transBean) {System.out.println("【公共】业务逻辑执行。。。");doBusiness(transBean);}public abstract void initParams(TransBean transBean);public abstract void checkParams(TransBean transBean);public abstract void checkBusiness(TransBean transBean);public abstract void doBusiness(TransBean transBean);}
package com.kkdev.controller;import java.io.IOException;import java.io.OutputStream;import java.util.Map;import javax.servlet.http.HttpServletResponse;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.serializer.SerializerFeature;import com.kkdev.domain.TransBean;public class BaseController {public void returnClient(HttpServletResponse response, TransBean transBean) {Map<String, String> responseMap = transBean.getResponseMap();if (responseMap == null || responseMap.isEmpty()) {responseMap.put("ret_code", "99");responseMap.put("ret_msg", "系统异常!");}System.out.println("返回报文:" + responseMap);String jsonStr = JSON.toJSONString(responseMap,SerializerFeature.WriteMapNullValue);OutputStream out = null;try {out = response.getOutputStream();out.write(jsonStr.getBytes("utf-8"));out.flush();} catch (IOException e) {e.printStackTrace();System.out.println("系统异常!");} finally {if (out != null) {try {out.close();} catch (IOException e) {e.printStackTrace();System.out.println("系统异常!");}}}}}
package com.kkdev.controller;import java.util.Map;import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang3.StringUtils;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import com.kkdev.business.MainBusiness;import com.kkdev.domain.TransBean;import com.kkdev.utils.BeanUtils;import com.kkdev.utils.RequestUtils;@Controllerpublic class MainController extends BaseController {@RequestMapping(value = "/trans{trans_code}")public void trans(HttpServletResponse response,@PathVariable(value = "trans_code") String transCode) {Map<String, String> params = RequestUtils.getRequestParams();System.out.println("请求报文:" + params);TransBean transBean = new TransBean();if (params == null || params.isEmpty()|| StringUtils.isEmpty(transCode)) {transBean.addResponseParam("ret_code", "00");transBean.addResponseParam("ret_msg", "服务已启动!");returnClient(response, transBean);return;}transBean.setRequestMap(params);transBean.setLocalMap(params);transBean.addLocalParam("trans_code", transCode);// 生成交易实例MainBusiness mB = (MainBusiness) BeanUtils.getBean("t" + transCode);if (mB == null) {transBean.addResponseParam("ret_code", "99");transBean.addResponseParam("ret_msg", "系统异常!");returnClient(response, transBean);return;}mB.doService(transBean);transBean.addResponseParam("ret_code", "00");transBean.addResponseParam("ret_msg", "交易成功");returnClient(response, transBean);return;}}
package com.kkdev.domain;import java.util.HashMap;import java.util.Map;public class TransBean {private Map<String, String> requestMap;private Map<String, String> localMap;private Map<String, String> responseMap;public String getRequestParam(String key) {if (requestMap == null) {return null;}return requestMap.get(key);}public String getLocalParam(String key) {if (localMap == null) {return null;}return localMap.get(key);}public String getResponseParam(String key) {if (responseMap == null) {return null;}return responseMap.get(key);}public void addRequestParam(String key, String value) {if (requestMap == null) {requestMap = new HashMap<String, String>();}requestMap.put(key, value);}public void addResponseParam(String key, String value) {if (responseMap == null) {responseMap = new HashMap<String, String>();}responseMap.put(key, value);}public void addLocalParam(String key, String value) {if (localMap == null) {localMap = new HashMap<String, String>();}localMap.put(key, value);}public Map<String, String> getResponseMap() {return responseMap;}public void setResponseMap(Map<String, String> responseMap) {this.responseMap = responseMap;}public Map<String, String> getRequestMap() {return requestMap;}public void setRequestMap(Map<String, String> requestMap) {this.requestMap = requestMap;}public Map<String, String> getLocalMap() {return localMap;}public void setLocalMap(Map<String, String> localMap) {this.localMap = localMap;}}
package com.kkdev.utils;import org.springframework.web.context.ContextLoader;import org.springframework.web.context.WebApplicationContext;public class BeanUtils {private static WebApplicationContext wac = null;public static Object getBean(String beanId) {if (wac == null) {wac = ContextLoader.getCurrentWebApplicationContext();}return wac.getBean(beanId);}}
package com.kkdev.utils;import java.util.Enumeration;import java.util.HashMap;import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;public class RequestUtils {public static Map<String, String> getRequestParams() {HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();Map<String, String> params = new HashMap<String, String>();Enumeration<String> paramsNames = request.getParameterNames();for (Enumeration<String> e = paramsNames; e.hasMoreElements();) {String name = e.nextElement().toString();String value = request.getParameter(name);params.put(name, value);};return params;}}









原创粉丝点击