That way I want to stay

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            55 Posts :: 1 Stories :: 41 Comments :: 0 Trackbacks
          ? http://www.aygfsteel.com/Files/Wingel/敏捷開發的必要技巧第1,2章.rar???????????????????????????????????????????????????????????????????????????????????????????????????????????????????
          ??????????????? 第1章 移除重復代碼
          ???????????????????????????????????????????????????????????????????????????????
          重復代碼是怎么產生的?

          請觀察下面的代碼,我們已經有一個根據出租記錄的id取出租用客戶的姓名的方法:getCustomerName。

          ??? public class BookRental { //該類描述出租記錄
          ??????? String id;
          ??????? String customerName;

          ??????? ...

          ??? }
          ??? public class BookRentals {
          ?????? private Vector rentals;
          ?????? public String getCustomerName(String rentalId) { 根據出租id取出客戶姓名
          ?????????? for (int i = 0; i < rentals.size(); i++) {
          ????????????? BookRental rental = (BookRental) rentals.elementAt(i);
          ????????????? if (rental.getId().equals(rentalId)) {
          ????????????????? return rental.getCustomerName();
          ?????????????? }
          ?????????? }
          ?????????? throw new RentalNotFoundException();
          ??????? }
          ??? }
          ??? public class RentalNotFoundException extends Exception {

          ??????? ...

          ??? }

          假定現在你要增加一個新的方法,該方法是根據出租記錄的id刪除該記錄,然后把它命名為deleteRental(String rentalId)。現在你已經考慮到,就像getCustomerName這個方法一樣,你要一個一個遍歷出租記錄。所以你就將getCustomerName這個方法里面的一些代碼拷出來,然后稍微修改一下:

          ??
          .....


          為什么我們要移除重復代碼?

          我來向各位程序員同學稍微說一下,在BookRentals這個類中,rentals這個屬性的類型是Ventor,如果我們需要將它改為數組,那我們就必須將所有的"rentals.size()"改為"rentals.length". 在重構以后的版本中,我們只需要在getRentalIdxById這個方法中修改一次,而在原來的版本,我們就得在getCustomerName跟deleteRental兩個方法中都改一次。類似的,我們還要將所有的"rentals.elementAt(i)" 改為 "rentals[i]". 又是改一次跟改兩次的比較!

          大多數情況中,如果類似這樣的代碼在10個地方重復,當我們修改代碼的時候,就要修改10個地方,我們并不能保證能把這10個地方都記住了,而一旦漏掉了幾個地方,等待我們的,是一處一處的錯誤去修復。而最致命的是,當我們修改的是業務邏輯時,這時候,不管我們漏掉了幾個地方,IDE都不會報錯,那么,等待我們的,將一堆去檢查,而造成的一些bug中,很可能是短時間內還發現不了了.慘-_-!!

          具體的內容在上面的下載鏈接里面的pdf文件里,看pdf比較舒服。

          http://www.aygfsteel.com/Files/Wingel/敏捷開發的必要技巧第1,2章.rar
          posted on 2006-11-27 21:22 Wingel 閱讀(1960) 評論(0)  編輯  收藏 所屬分類: 敏捷開發
          主站蜘蛛池模板: 卓资县| 金坛市| 阿鲁科尔沁旗| 平和县| 肇东市| 托克托县| 遵义市| 正蓝旗| 南通市| 寻乌县| 连云港市| 凤凰县| 新兴县| 郓城县| 平昌县| 忻城县| 诸城市| 巴彦淖尔市| 新丰县| 曲阳县| 清水县| 文登市| 宝坻区| 都江堰市| 新民市| 三穗县| 巴马| 夏津县| 乌恰县| 大安市| 钟祥市| 正安县| 江安县| 行唐县| 彩票| 车致| 叶城县| 广南县| 台前县| 唐河县| 卢湾区|