两个版本,哪个更好

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

 

第一版本代码:

 

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

 

 

你可能感兴趣的:(版本)