两个版本,哪个更好?(更具可读性,可维护性。。。。。。)
第一版本代码:
package nc.bs.scap.business;
import java.util.HashMap;
import java.util.Map;
import nc.bs.scap.abstractbusi.SCAPAbstractBusi;
import nc.bs.scap.backfill.SCAPOnceBackFillBill;
import nc.bs.trade.business.HYPubBO;
import nc.bs.yc.pub.BackFillBill;
import nc.vo.pub.AggregatedValueObject;
import nc.vo.pub.BusinessException;
import nc.vo.pub.compiler.PfParameterVO;
import nc.vo.pub.lang.UFBoolean;
import nc.vo.scap.trynotice.TrynoticeBVO;
import nc.vo.scap.tryrecord.TryrecordBVO;
import nc.vo.yc.utils.YCPubUtils;
/**
* 试用纪录单业务类
*
* @author limx
* @Description TODO
* @date 2011-4-10 上午09:38:47
*
*/
public class TryrecordBusi extends SCAPAbstractBusi {
@Override
public void approve(AggregatedValueObject aggVo, PfParameterVO vo) throws BusinessException {
super.approve(aggVo, vo);
backFillTryResult(aggVo, vo, true);// 回写试用结果
}
@Override
public void unApprove(AggregatedValueObject aggVo, PfParameterVO vo) throws BusinessException {
super.unApprove(aggVo, vo);
backFillTryResult(aggVo, vo, false);// 删除试用结果
}
/**
* 回写试用记录单的试用结果
*
* @param aggVo
* 聚合VO
* @param parameVo
* @param isApprove
* 审核和弃审开关
* @throws BusinessException
*/
public void backFillTryResult(AggregatedValueObject aggVo, PfParameterVO parameVo, boolean isApprove) throws BusinessException {
TryrecordBVO[] bodyVOs = (TryrecordBVO[]) aggVo.getChildrenVO();
Map<String, TryrecordBVO> backFillTryrecordBVOS = new HashMap<String, TryrecordBVO>();
for (TryrecordBVO tryrecodeSelectedBVO : bodyVOs) {
backFillTryrecordBVOS.put(tryrecodeSelectedBVO.getVlastbillrowid(), tryrecodeSelectedBVO);// 添加回写数据
}
if (!YCPubUtils.isEmpty(backFillTryrecordBVOS.keySet())) {
HYPubBO hyPubBO = new HYPubBO();
// 查询要进行回写的试用通知单表体记录
TrynoticeBVO[] trynoticeBVOS = (TrynoticeBVO[]) hyPubBO.queryByCondition(TrynoticeBVO.class, TrynoticeBVO.PK_TRYNOTICE_B + " in ("
+ YCPubUtils.getUnionSQLString(backFillTryrecordBVOS.keySet()) + ")");
for (TrynoticeBVO trynoticeBVO : trynoticeBVOS) {
TryrecordBVO tryrecodeSelectedBVO = backFillTryrecordBVOS.get(trynoticeBVO.getPk_trynotice_b());
if (isApprove) {
trynoticeBVO.setVtryresult(tryrecodeSelectedBVO.getVtryresult());// 审核回写
trynoticeBVO.setIstryfinish(UFBoolean.TRUE);
} else {
trynoticeBVO.setVtryresult(null);// 弃审回写
trynoticeBVO.setIstryfinish(null);
}
}
hyPubBO.updateAry(trynoticeBVOS);
}
}
/*
* 创建单据回写类
*/
@Override
protected BackFillBill createBackFill() throws BusinessException {
return new SCAPOnceBackFillBill();
}
}
重构后的代码:
package nc.bs.scap.business;
import java.util.HashMap;
import java.util.Map;
import nc.bs.scap.abstractbusi.SCAPAbstractBusi;
import nc.bs.scap.backfill.SCAPOnceBackFillBill;
import nc.bs.trade.business.HYPubBO;
import nc.bs.yc.pub.BackFillBill;
import nc.vo.pub.AggregatedValueObject;
import nc.vo.pub.BusinessException;
import nc.vo.pub.compiler.PfParameterVO;
import nc.vo.pub.lang.UFBoolean;
import nc.vo.scap.trynotice.TrynoticeBVO;
import nc.vo.scap.tryrecord.TryrecordBVO;
import nc.vo.yc.utils.YCPubUtils;
/**
* 试用纪录单业务类
*
* @author limx
* @Description TODO
* @date 2011-4-10 上午09:38:47
*
*/
public class TryrecordBusi extends SCAPAbstractBusi {
@Override
public void approve(AggregatedValueObject aggVo, PfParameterVO vo) throws BusinessException {
super.approve(aggVo, vo);
Map<String, String> tryResult = getTryResutl(aggVo);
TrynoticeBVO[] trynoticeBVOs = getTrynoticeBVOs(tryResult);
backFillTryResultWhenApprove(tryResult, trynoticeBVOs);
}
@Override
public void unApprove(AggregatedValueObject aggVo, PfParameterVO vo) throws BusinessException {
super.unApprove(aggVo, vo);
Map<String, String> tryResult = getTryResutl(aggVo);
TrynoticeBVO[] trynoticeBVOs = getTrynoticeBVOs(tryResult);
backFillTryResultWhenUnapprove(trynoticeBVOs);
}
/**
* 返回 map<上层单据行id,试用记录单的试用结果>
* @param aggVO
* @return
*/
private Map<String, String> getTryResutl(AggregatedValueObject aggVO) {
// 需要回写的试用结果
TryrecordBVO[] bodyVOs = (TryrecordBVO[])aggVO.getChildrenVO();
Map<String, String> tryResult = new HashMap<String, String>();
for(TryrecordBVO backFillTryResultBVO : bodyVOs) {
tryResult.put(backFillTryResultBVO.getVlastbillrowid(), (String)backFillTryResultBVO.getAttributeValue(TryrecordBVO.VTRYRESULT));
}
return tryResult;
}
/**
* 返回被参照的试用通知单表体
* @param tryResult
* @return
* @throws BusinessException
*/
private TrynoticeBVO[] getTrynoticeBVOs(Map<String, String> tryResult) throws BusinessException {
// 被参照的试用通知单
return (TrynoticeBVO[]) getHYPubBO().queryByCondition(TrynoticeBVO.class, TrynoticeBVO.PK_TRYNOTICE_B + " in (" +
YCPubUtils.getUnionSQLString(tryResult.keySet()) + ")");
}
/**
* 审核回写试用结果
* @param tryResult
* @param trynoticeBVOs
* @throws BusinessException
*/
private void backFillTryResultWhenApprove(Map<String, String> tryResult, TrynoticeBVO[] trynoticeBVOs) throws BusinessException {
for(TrynoticeBVO trynoticeBVO : trynoticeBVOs) {
trynoticeBVO.setVtryresult(tryResult.get(trynoticeBVO.getPk_trynotice_b()));
trynoticeBVO.setIstryfinish(UFBoolean.TRUE);
}
getHYPubBO().updateAry(trynoticeBVOs);
}
/**
* 弃审回写试用结果
* @param trynoticeBVOs
* @throws BusinessException
*/
private void backFillTryResultWhenUnapprove(TrynoticeBVO[] trynoticeBVOs) throws BusinessException {
for(TrynoticeBVO trynoticeBVO : trynoticeBVOs) {
trynoticeBVO.setVtryresult(null);
trynoticeBVO.setIstryfinish(null);
}
getHYPubBO().updateAry(trynoticeBVOs);
}
private HYPubBO hyPubBO;
private HYPubBO getHYPubBO() {
if(YCPubUtils.isEmpty(hyPubBO)) {
hyPubBO = new HYPubBO();
}
return hyPubBO;
}
/*
* 创建单据回写类
*/
@Override
protected BackFillBill createBackFill() throws BusinessException {
return new SCAPOnceBackFillBill();
}
}
分享到:
相关推荐
- **程序配置**:在编写程序时,通过`#include`指令和链接器选项来选择使用哪个版本的库。 总之,OpenCV的这两个版本在Linux环境下安装需要一定的系统配置和编译知识。不同版本的特性决定了它们在特定应用场景下的...
总的来说,了解不同版本的MySQL驱动与JDK的兼容性以及它们在功能上的差异,有助于开发者更好地选择和配置适合项目的数据库连接方案。在给定的场景下,如果项目使用的是JDK 1.5,那么必须使用`mysql-connector-java-...
Redis是一款高性能的键值对数据库,常用于缓存和数据持久化。在Windows环境中,由于其原生支持的系统主要是Linux,因此需要...同时,由于包含了两个版本,用户也可以对比其差异,更好地理解Redis的发展历程和新特性。
这个压缩包"pn532 蛐蛐 两个版本.zip"包含了PN532相关的两个不同版本的软件工具——PN532-mfoc-mfcuk-GUI,一个是3.0GUI,另一个是1.0GUI。这些工具通常用于与PN532芯片进行交互,进行调试、测试或者开发基于NFC的...
为了更好地理解这两个版本,我们可以解压提供的"dragonhd_jb51.rar"和"dragonHD1.4.2.zip"文件,分别运行并对比它们的运行效果。通过实际操作,我们可以直观地看到不同版本的功能差异,并根据项目需求来选择合适的...
在这个压缩包“Chrome30和63两个版本.zip”中,包含了Chrome的两个较早版本的安装文件,分别是Chrome 30和Chrome 63,主要用于那些需要特定版本浏览器的用户或者进行兼容性测试。 Chrome 30是2014年发布的一个版本...
本文将深入探讨VS2013和VS2015中常用的两个CMake版本:3.6.1和3.11.3,并分析它们的关键特性和应用场景。 首先,CMake 3.6.1是CMake项目在2016年发布的一个稳定版本,主要针对当时的开发环境提供支持。这个版本包含...
总的来说,选择哪个版本取决于你的项目需求和所使用的Java EE版本。通常,推荐使用较新的版本,因为它们通常包含更多的功能和修复了更多的问题。但在某些情况下,如果项目已经依赖于旧版本的库,或者需要保持与旧...
JSON,全称JavaScript Object Notation,是一种轻量级的数据交换格式。它以其简洁明了的文本格式,易于人阅读和...理解这两个库的差异可以帮助我们更好地选择和使用它们,从而确保在各种环境下都能有效地处理JSON数据。
如果你的项目不需要考虑老版本的IE浏览器,那么JQuery 2.0可能是一个更好的选择,因为它可以利用更多的现代浏览器特性。 3. **插件库**: JQuery的真正力量在于其丰富的插件生态系统。这些插件是由社区开发的,用于...
在这个场景中,我们关注的是JDK的两个重要版本:JDK 1.8和JDK 15,它们都在MacOS 64位操作系统上运行。这两个版本在Java开发者中都有着广泛的应用,各有其特点和改进。 **JDK 1.8**,也被称为Java 8,于2014年发布...
本文将详细阐述ISE 12.3与14.7两个版本的Xilinx Integrated Software Environment(ISE)的license管理和安装过程,为用户提供全面的指导。 **一、ISE简介** Xilinx ISE是一款由Xilinx公司开发的用于设计、仿真、...
这个压缩包包含了Botan的两个不同版本:2.19.4和3.3.0。这两个版本可能分别对应了不同的功能集、性能优化或修复的安全漏洞。 Botan 2.19.4是早期的一个稳定版本,它可能包含了基本的加密算法如AES、DES、Blowfish,...
本压缩包包含layui的两个不同版本:2.2.5和2.5.6。 首先,我们来看看layui的核心特性: 1. **模块化**:layui采用模块化设计,每个功能模块都有独立的JS和CSS文件,便于按需加载,减少不必要的资源消耗。 2. **响应...
在实际开发中,选择JDK 7的哪个版本通常取决于具体需求。如果项目需要最新的性能优化和语言特性,那么1.7.0_09可能更合适。而如果安全是首要考虑的因素,那么1.7.0_45由于包含了更多的安全修复,会是更好的选择。 ...
这表明这两个版本的项目是专门针对这两个老版本的开发环境优化的,可能包含了与这些版本兼容的库和设置。 UEditor的集成通常涉及以下步骤: 1. **下载与解压**:首先,你需要从官方或第三方源下载UEditor的压缩包...
6. **自定义滚动同步器**:为了更好地控制同步行为,可以创建一个自定义的ScrollSyncer类,将滚动事件处理逻辑封装其中,便于复用和维护。 7. **布局管理**:在XML布局文件中,两个ListView可以通过LinearLayout、...
在给定的压缩包中,包含的是TortoiseSVN的两个不同版本,分别是1.6和1.8,都是专为64位操作系统设计的。TortoiseSVN是一个与Windows Shell集成的SVN客户端,提供了直观易用的图形用户界面。 **1. SVN基本概念** - ...
STM32F0xx_DFP是Keil公司为STM32F0系列微控制器提供的一套开发工具包,主要用于在Keil uVision集成...根据MDK版本选择合适的DFP版本,可以更好地利用Keil uVision的全部功能,为STM32F0系列的应用开发提供有力的支持。
在CMake 2.8中,你可以找到适用于Windows和Linux两个操作系统版本的安装包。Windows版本通常为一个.exe可执行文件,可以引导用户进行安装,而Linux版本可能是一个.tar.gz或.deb类型的包,需要手动解压或使用包管理器...