`
lovelimx
  • 浏览: 20513 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

两个版本,哪个更好

 
阅读更多

两个版本,哪个更好?(更具可读性,可维护性。。。。。。)

 

第一版本代码:

 

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();
	}
}

 

 

分享到:
评论

相关推荐

    mysql8、mysql5两个版本驱动

    总的来说,了解不同版本的MySQL驱动与JDK的兼容性以及它们在功能上的差异,有助于开发者更好地选择和配置适合项目的数据库连接方案。在给定的场景下,如果项目使用的是JDK 1.5,那么必须使用`mysql-connector-java-...

    Redis的Windows版本,内含3.2.100和4.0.2.2两个版本

    Redis是一款高性能的键值对数据库,常用于缓存和数据持久化。在Windows环境中,由于其原生支持的系统主要是Linux,因此需要...同时,由于包含了两个版本,用户也可以对比其差异,更好地理解Redis的发展历程和新特性。

    NGUI两个版本

    在实际项目中,选择哪个版本取决于具体需求。如果你的项目需要兼容较早的Unity版本或对性能有特殊要求,v3.6.8可能是合适的;而如果追求最新的特性和更高的性能,v7.7.2会是更好的选择。当然,升级到新版本可能需要...

    pn532 蛐蛐 两个版本.zip

    这个压缩包"pn532 蛐蛐 两个版本.zip"包含了PN532相关的两个不同版本的软件工具——PN532-mfoc-mfcuk-GUI,一个是3.0GUI,另一个是1.0GUI。这些工具通常用于与PN532芯片进行交互,进行调试、测试或者开发基于NFC的...

    Chrome30和63两个版本.zip

    在这个压缩包“Chrome30和63两个版本.zip”中,包含了Chrome的两个较早版本的安装文件,分别是Chrome 30和Chrome 63,主要用于那些需要特定版本浏览器的用户或者进行兼容性测试。 Chrome 30是2014年发布的一个版本...

    ODBC的驱动包括两个版本,5.3.11与8.0.13

    在本话题中,我们主要关注的是ODBC驱动,特别是针对MySQL数据库的两个版本:5.3.11和8.0.13。 MySQL ODBC驱动是连接MySQL数据库的重要组件,它作为中间件,使得具备ODBC功能的应用程序能够与MySQL服务器通信。这两...

    jstl和stand两个包,分别有1.0 1.2两个版本

    总的来说,选择哪个版本取决于你的项目需求和所使用的Java EE版本。通常,推荐使用较新的版本,因为它们通常包含更多的功能和修复了更多的问题。但在某些情况下,如果项目已经依赖于旧版本的库,或者需要保持与旧...

    json/json2.js两个版本

    JSON,全称JavaScript Object Notation,是一种轻量级的数据交换格式。它以其简洁明了的文本格式,易于人阅读和...理解这两个库的差异可以帮助我们更好地选择和使用它们,从而确保在各种环境下都能有效地处理JSON数据。

    eclipse插件findbugs(两个版本)

    这个压缩包包含FindBugs插件的两个不同版本,分别是1.3.9和3.0.1,适用于Eclipse用户,帮助他们提升代码质量和可维护性。 1. FindBugs插件介绍: FindBugs插件是Eclipse中的一个扩展,它可以集成到开发环境中,...

    JDK1.8和JDK15两个版本,MacOS系统64位

    在这个场景中,我们关注的是JDK的两个重要版本:JDK 1.8和JDK 15,它们都在MacOS 64位操作系统上运行。这两个版本在Java开发者中都有着广泛的应用,各有其特点和改进。 **JDK 1.8**,也被称为Java 8,于2014年发布...

    JQuery的1.11.1和2.0的两个版本的插件库

    如果你的项目不需要考虑老版本的IE浏览器,那么JQuery 2.0可能是一个更好的选择,因为它可以利用更多的现代浏览器特性。 3. **插件库**: JQuery的真正力量在于其丰富的插件生态系统。这些插件是由社区开发的,用于...

    ISE 12.3与14.7两个版本license及安装步骤详细介绍

    本文将详细阐述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和3.3.0。这两个版本可能分别对应了不同的功能集、性能优化或修复的安全漏洞。 Botan 2.19.4是早期的一个稳定版本,它可能包含了基本的加密算法如AES、DES、Blowfish,...

    vs2013和vs2015常用的两个版本的cmake工具(3.6.1和3.11.3)

    本文将深入探讨VS2013和VS2015中常用的两个CMake版本:3.6.1和3.11.3,并分析它们的关键特性和应用场景。 首先,CMake 3.6.1是CMake项目在2016年发布的一个稳定版本,主要针对当时的开发环境提供支持。这个版本包含...

    JDK7的1.7.09和1.7.45两个版本包

    在实际开发中,选择JDK 7的哪个版本通常取决于具体需求。如果项目需要最新的性能优化和语言特性,那么1.7.0_09可能更合适。而如果安全是首要考虑的因素,那么1.7.0_45由于包含了更多的安全修复,会是更好的选择。 ...

    UEditor配置好的asp.net网站,包括VS2008和VS2010两个版本的。非常不错哦!

    这表明这两个版本的项目是专门针对这两个老版本的开发环境优化的,可能包含了与这些版本兼容的库和设置。 UEditor的集成通常涉及以下步骤: 1. **下载与解压**:首先,你需要从官方或第三方源下载UEditor的压缩包...

    两个ListView同步滑动

    6. **自定义滚动同步器**:为了更好地控制同步行为,可以创建一个自定义的ScrollSyncer类,将滚动事件处理逻辑封装其中,便于复用和维护。 7. **布局管理**:在XML布局文件中,两个ListView可以通过LinearLayout、...

    svn两个版本的客户端1.6和1.8(64位)

    在给定的压缩包中,包含的是TortoiseSVN的两个不同版本,分别是1.6和1.8,都是专为64位操作系统设计的。TortoiseSVN是一个与Windows Shell集成的SVN客户端,提供了直观易用的图形用户界面。 **1. SVN基本概念** - ...

    Keil.STM32F0xx_DFP 包括2.0.0和1.4.0两个版本

    STM32F0xx_DFP是Keil公司为STM32F0系列微控制器提供的一套开发工具包,主要用于在Keil uVision集成...根据MDK版本选择合适的DFP版本,可以更好地利用Keil uVision的全部功能,为STM32F0系列的应用开发提供有力的支持。

    cmake2.8版本(包含windows和linux两个版本的安装包以及demo)

    在CMake 2.8中,你可以找到适用于Windows和Linux两个操作系统版本的安装包。Windows版本通常为一个.exe可执行文件,可以引导用户进行安装,而Linux版本可能是一个.tar.gz或.deb类型的包,需要手动解压或使用包管理器...

Global site tag (gtag.js) - Google Analytics