各位仁兄,小弟一事不解,望多赐教~
由于之前写的一个方法参数太多, 所以architect要求组织成一个VO (WorkRequestPriorityUpdateVO)。 但我在这个VO中加了一些比较简单的逻辑(isAcceleratedChanged,isExpeditedChanged,isWRUpdatePriorityValid ), Formal Code Review的时候, 大家一致决定不能在VO中加任何逻辑。 会后, 我找了一些关于VO的文章,没有发现VO中必定不能加逻辑的说法啊, 更何况, 我加的是很简单的逻辑? 其实,我甚至觉得,如果因为方法参数太多, 而引入一个对象, 应该是DTO的概念吧? 那么是否能在DTO中加部分逻辑呢? 望大家解惑, 不甚感激!!
public class WorkRequestPriorityUpdateVO implements Serializable { private static final long serialVersionUID = -8711970309529933921L; private Long accountId; private boolean expeditedFlag; private boolean originalExpeditedFlag; private boolean acceleratedFlag; private boolean originalAcceleratedFlag; private String acceleratedReason; private String originalAcceleratedReason; private String trackingId; /** * @param originalAcceleratedFlag * - original accelerated flag * @param acceleratedFlag * - current accelerated flag * @param originalAcceleratedReason * - original accelerated reason * @param acceleratedReason * - current accelerated reason */ public WorkRequestPriorityUpdateVO ( boolean originalAcceleratedFlag, boolean acceleratedFlag, String originalAcceleratedReason, String acceleratedReason ) { this.acceleratedFlag = acceleratedFlag; this.originalAcceleratedFlag = originalAcceleratedFlag; this.acceleratedReason = acceleratedReason; this.originalAcceleratedReason = originalAcceleratedReason; }
/** * Check if accelerated flag or accelerated reason is changed. * * @return */ public boolean isAcceleratedChanged() { return (acceleratedFlag != originalAcceleratedFlag) || ((acceleratedReason == null && originalAcceleratedReason != null) || (acceleratedReason != null && originalAcceleratedReason == null) || (acceleratedReason != null && originalAcceleratedReason != null && !acceleratedReason.equals(originalAcceleratedReason))); }
/** * Validate if the data is correct to update work request priority. * * @return */ public boolean isWRUpdatePriorityValid() { return accountId != null && trackingId != null && (this.isAcceleratedChanged() || this.isExpeditedChanged()); }
// Setter.......... // Getter............ }
|
构建WorkRequestPriorityUpdateVO的部分代码:
// Call before copyProperties make sure that holds the original values WorkRequestPriorityUpdateVO wrPriorityUpdateVO = new WorkRequestPriorityUpdateVO( originalAccount.getAcceleratedFlag(), ((AccountKS)account).getAcceleratedFlag(), originalAccount.getAcceleratedReason(), ((AccountKS)account).getAcceleratedReason());
|
调用isAcceleratedChanged()的代码1:
if (wrPriorityUpdateVO.isAcceleratedChanged(){ wrPriorityUpdateVO.setAccountId(accountId); wrPriorityUpdateVO.setTrackingId(trackingId);
|
调用isAcceleratedChanged()的代码2:
//Update accelerate reason if (wrPriorityUpdateVO.isAcceleratedChanged()){ if (wrPriorityUpdateVO.isAcceleratedFlag()){ workRequest.setWorkRequestGrouping(WR_PRIORITY_PREFIX + AcceleratedReasonEnumKS.valueOf(wrPriorityUpdateVO.getAcceleratedReason()).getDisplayName()); }else{ workRequest.setWorkRequestGrouping(null); } }
|
如果把isAcceleratedChanged()这个方法移出WorkRequestPriorityUpdateVO, 那么每次维护起来, 我要修改两个地方, 大家的建议如何?
[该贴被d02540315于2010-05-25 10:19修改过]