技术开发 频道

J2ee 开发编程规范



    三、 按职责进行分类,做你该做的事情!
    每一个类应该具有一个明确的职责,不要把它相干和不相干的代码都填进来。那些不相干的代码应该重构为另一个单独的类或者是助手类。如果一个不同概念级别上的代码对相同的对象重复调用,那么它可能需提升为一个父类。而其它对象通过继承这个父类。
     通过把相干的重复代码提取到父类和把不相干的代码重构为一个助手类是解决代码重复的常用方法。
这样可以阻止一个类的爆炸式增长,变成一个臃肿的类。一个类,包括Javadoc和内部注释,如果超过了500行代码,它都是需要重构的候选者。因为它可能已经承担了太多的职责。可以运用策略模式来用一个接口把原类与助手类分开,实现助手类在不同的情况可以有不同的实现。来提高系统的灵活性。

     每一个方法都应该具有一个单一而清晰明确的职责。否则这个方法应该进行重构。同时这也可以防止方法变得很长。
1public String addCounter(CounterDTO counter) throws BusinessException { 2String buffer ="00000000"; 3//读取seqence 4String sequenceStr= (String) this.getSqlMapClientTemplate().queryForObject(SqlID.GET_COUNTER_PK,null); 5int seqLength ; 6seqLength = sequenceStr.length(); 7String counterNo =""; 8String regionCode = counter.getRegionCode(); 9if(regionCode.length() > 2) { 10regionCode = regionCode.substring(0,2); 11} 12counterNo = regionCode + buffer.substring(0,buffer.length() - seqLength)+sequenceStr; 13counter.setCounterNo(counterNo);//设置主键 14 15sqlMap.insert(SqlID.ADD_COUNTER, counter);//插入柜面数据 16return pk; 17 18} 19
    上面的方法是新增一个柜面信息,它有三个步聚:
    1. 读取指定的sequence,获得一个唯一柜面流水号
    2. 根据柜面的机构代码和流水号产生一个唯一8位的柜面号,柜面号由两位的机构代码+6位的流水号组成。流水号不足6位,在前面以0补充。
    3. 设置柜面信息的柜面号为新产生的柜面号,并插入数据库,成功则返回新的柜面号。

    重构后的代码:
1//读取sequence,获得流水号 2private String getCounterSequenceNo() throws BusinessException { 3return (String) this.getSqlMapClientTemplate().queryForObject(SqlID.GET_COUNTER_PK,null); 4} 5 6//根据机构代码来生成柜面号 7private String generateCounterNo(String regionCode)throws BusinessException { 8String buffer ="00000000"; 9String sequenceStr = this.getCounterSequenceNo(); 10int seqLength ; 11seqLength = sequenceStr.length(); 12String counterNo =""; 13if(regionCode.length() > 2) { 14regionCode = regionCode.substring(0,2); 15} 16counterNo = regionCode + buffer.substring(0,buffer.length() - seqLength)+sequenceStr; 17return counterNo; 18} 19 20//新增柜面 21public String addCounter(CounterDTO counter) throws BusinessException { 22String pk=null; 23pk = this.generateCounterNo(counter.getRegionCode());//产生主键 24counter.setCounterNo(pk);//设置主键 25sqlMap.insert(SqlID.ADD_COUNTER, counter);//插入柜面数据 26return pk; 27} 28
    重构后的代码大大的便于阅读和维护。使方法具有明确的责任。
    注意在重构的时候,通过我们把那些相对独立的任务变成一个私有的方法。

    关于一个方法应该限制为多长,没有明确的规定。它应该以人的舒服度为主。一个方法包括注释(不含javadoc)的实现代码能够在一屏中可以进行阅读。否则它就应该需要进行重构。一般来说,一个方法的代码控制在30-40行是非常好的的。
0
相关文章