因为是为朋友做的一个小系统,顺带研究一点小技术。
技术上采用的是jpa+spring+struts2。
由于系统本身较小,所以主要的精力也就放在对框架层次的学习上。
jpa的实现选用hibernate。这次是在总结在公司自己所接触到的几个框架之上设计而成。
从两年前我开始学习mvc概念的时候,就在思考我们究竟需要一个怎样的Action层。先看一段action层的代码。
/**
* 翻页查询列表(内容合成业务)
*
* @return
* @author liboc
*/
public String contentComposeInfoList() {
try {
sysOperator = Cantants.getCurUser();
pageVO.setPageShowList(contentComposeInfoService.getContentComposeInfoList(pageVO, sysOperator));
// 取得产品信息
ProductInfoBean tempPageVO = new ProductInfoBean();
tempPageVO.setSearchProductStatus("4");// 只展示产品状态为生效(4)的产品信息
pageVO.setProductInfoList(productInfoService.getProductInfoList(tempPageVO, sysOperator));
Cantants.saveSysLog(Cantants.FLAG_SUCCESS,
"内容标题:" + pageVO.getSearchContentTitle() + "产品ID:" + pageVO.getSearchProductId() + "状态:" + pageVO.getSearchComposeStatus() + "计划发送时间:"
+ pageVO.getSearchPlanSendTime() + "实际发送时间:" + pageVO.getSearchSendTime() + "创建人员:" + pageVO.getSearchCreatePerson(), "内容合成业务信息查询",
Cantants.SYSLOG_OPERATE_QUERY, Cantants.SYSLOG_TYPE_OPERATE);
return "list";
} catch (LoginException e) {
FileLog.errorLog(e);
return LOGIN;
} catch (ServiceException se) {
Cantants.errorDeal(se.getMessage(), se, pageVO, "内容合成业务信息查询", Cantants.SYSLOG_OPERATE_QUERY);
return ERROR;
} catch (Exception e) {
Cantants.errorDeal("内容合成业务信息查询发生业务错误", e, pageVO, "内容合成业务信息查询", Cantants.SYSLOG_OPERATE_QUERY);
return ERROR;
}
}
这一段20来行的代码中,包含了日志处理、异常处理及部分业务处理代码。这在开发中,可能不过是一阵复制、粘贴。然后修改其中的几个字。程序员的时间不应该花费如此之多来做这种重复而且无多大实际意义的事。
在aop盛行的今天,我们是不应该让这种情况长期出现的,ee程序员的主要关注点应该是业务及模型。而mvc分层开发中,action层中,我想看到的是:
public String queryAllEntityByPage() {
stockCompanies = companyService.getAllEntityByWhere(getEntityClass(), null);
return SHOWALLBYPAGE;
}
将验证、权限、日志、异常通通剥离,还一个清晰明了的Controller,只做Model与View之间沟通的桥梁。