四、 避免重复的代码
在一个类中,可能在各个方法中产生了相同的代码块。这就是重复的代码。重复的代码是难以维护和难以理解的。
有一个类其中有两个方法如下:
这似乎没有任何问题,但是这样的代码重复可能会导致严重的问题。1//发送一个包裹 2public String deliveryWarePack(WarePackDTO warePack) 3throws BusinessException ...{ 4CommonDAOFactory factory = (CommonDAOFactory) this.context 5.getBean(CommonDAOFactory.COMMON_DAO_FACTORY_BEAN_NAME); 6WarePackDAO warePackDAO = (WarePackDAO) factory 7.getDAOByRegionCode(this.WARE_PACK_DAO_NAME, "00"); 8………… 9} 10 11//根据包号得到包信息 12public WarePackDTO getWarePackByPackNum(String packNum) 13throws BusinessException ...{ 14CommonDAOFactory factory = (CommonDAOFactory) this.context 15.getBean(CommonDAOFactory.COMMON_DAO_FACTORY_BEAN_NAME); 16WarePackDAO warePackDAO = (WarePackDAO) factory 17.getDAOByRegionCode(this.WARE_PACK_DAO_NAME, "00"); 18……… 19} 20
1. 太多的代码:如果重构后只用两行就可以了
2. 令阅读者迷惑不解,阅读者可能会对开发人员产生怀疑,认为这两处是两个不相同的代码,从而去进行比较,花费更多的时间和精力。
3. 造成修改的不一致,经常可能发现对一个方法进行了修改,而忘记也应该对另一个方法也进行相同的修改。增加代码的维护量。
修改后的代码:
1private WarePackDAO warePackDAO= getWarePackDAO(); 2private CommonDAOFactory getFactory() ...{ 3CommonDAOFactory factory = 4= (CommonDAOFactory) this.context 5.getBean(CommonDAOFactory.COMMON_DAO_FACTORY_BEAN_NAME); 6return factory; 7} 8 9Private WarePackDAO getWarePackDAO()...{ 10WarePackDAO dao = (WarePackDAO)this. getFactory(). getDAOByRegionCode( 11this.WARE_DAO_NAME, "00"); 12return dao; 13} 14 15//发送一个包裹 16public String deliveryWarePack(WarePackDTO warePack) 17throws BusinessException ...{ 18String packNumber = this.warePackDAO.insertWarePack(warePack); 19} 20 21//根据包号得到包信息 22public WarePackDTO getWarePackByPackNum(String packNum) 23throws BusinessException ...{ 24WarePackDTO warePack = this.warePackDAO.getWarePack(packNum); 25……………….. 26} 27