一個菜鳥在程式碼重構中的感想

eBusinessMan發表於2014-12-10
    最近在對我兩個月前的程式碼進行修補,由於發現存在許多bug。人生最痛苦的事情就是修補菜鳥的程式碼,雖然我現在依然是個菜鳥,但是相對於兩個月前的我來說,至少有一定的進步。如今回顧自己的程式碼,真的覺i得只有一個字----嫩,或者再加一個----弱(相對現在)!不過可以理解的是這畢竟是我的人生第二個小project(OA),可以理解,但是不容忽視。只要存在以下的問題:
    1.類與類,介面之間,沒有充分的利用到java的三大特色,例如,有一些類之間的屬性是共有的,我沒有將之抽取出來單獨成類然後又其他類繼承;一些方法完全可以通過介面來實現,而我沒有做到。導致專案整體程式碼重用率極其低,間接地拖低了開發效率。
    2.方法和類過於龐大,尤其是方法,有的甚至達到300行,凝練度不夠。
    3.方法中生成很多標識狀態的變數(如存在session中的標識已經第幾次修改表了等的標識變數),而且變數名字不夠含義明晰,導致閱讀起來非常困難(幸虧是兩個月前的我還有印象,要是半年前或更久的話,讀起來的話,會猝死的。)
    4.還有就是,程式設計不夠大氣!!總是想著如何節省訪問DB的次數或者是節省tomcat的空間(不想存一個Bean),於是總是把設定一些變數存放在session中,導致session的存放的屬性過於多,而且是那種一個一個的標識變數(以基本型別為多),出現了3中所述的情況,但是閱讀起來也更加令人猝死,因為前者只是在一個方法體內,可是存放在session中的屬性可以跨整個專案,於是,有時候在第10個servlet中閱讀到獲取一個session的屬性,但是會忘掉是在哪裡第一次存放session中的,或者是又得回到第2個servlet中去看是什麼作用的。存放在session中的屬性,由於跨度過大,導致後期的可讀性非常低,所以要學會別什麼都想著節省,有時候還是得耗點代價去保證專案的可閱讀性的,也許多一次連線DB,就更有利於後期維護。
    5從現在可以看出自己當時是有點設計模式的使用欲了,但是道行尚淺,不能很好的理解和控制,導致沒有用到抽象工廠模式和單例模式的精髓。
    6程式碼都是純手寫,沒有藉助一定的工具來自動生成,導致servlet一些地方的佈局不是很科學(雖然沒錯誤)。
    7註釋不夠,雖然有。serlvet中有一些程式碼,尤其是那些冗腫的程式碼處,註釋還可以詳細。
    8沒有藉助 GITHUB,沒有版本控制(當然當初也不知道這個工具)。導致自己的專案中要修改的程式碼都是就地註釋掉的(原封不改的註釋的,因為怕改後更錯,就可以復原),導致專案中垃圾程式碼過多。
    9.只想著節省tomcat記憶體和減少DB開支,但是卻沒有意識到程式設計過程中的“高代價誤區”
                如:1.使用+拼接字串,很耗記憶體;
                        2. 居然這樣寫:for(~~~){Class className = new Class className;~~~},顯然沒有理解java的GC機制。--非常浪費記憶體!
                        3.trycatch居然放在迴圈中   ---只能說還嫩了!
                        4.~~~5.~~~~~~

    10.邏輯不夠嚴謹。演算法低效率。
        ~~~~~~~~~~~~~~~~~N~~~~~~~~~~N~~(時間有限,而且已另留記錄,在此不贅言。)

    綜合上面的緣故,所以導致現在的我幾乎猝死----兩天內要修完五個模組,共涉及50多個servlet,17個jsp頁面。這回可真是血的教訓!!
    最近也有在看一看外國人寫的OA的程式碼,他們的程式碼裡都會定義非常多的類、介面、方法,類與類,類與介面之間很多是繼承和實現的關係,方法的程式碼行數很少,大部分都沒有超過20行程式碼,他們的程式碼都是方法之間的調來調去,不像我們的程式碼,一個方法下來幾十上百甚至兩三百行都是最基本的語句構成,很少像他們那樣呼叫自己的方法。
    ------他們真的是做到了“高內聚低耦合”!!我想,如果我是後期維護他們這個網站的人的話,肯定會非常的輕鬆,而且肯定很感激他們的努力(讓後來者可以活得更容易些)。
    兩者對比,我發現以下個人的原因:
        a.經驗不足,編碼前期分析設計不到位

        b.為了快速開發,沒有經過細緻分析設計(欲速則不達啊。。。不過我覺得當時的話在細緻設計也是難好到哪去,畢竟太菜了)

        c.缺乏意識,只為實現功能而寫程式碼,不管程式碼質量


    修改的過程雖然是痛苦的,但是並非毫無收穫的,至少知道自己存在的缺點,和優點,知道哪裡需要提升,其次改的過程中,也有一些新的專案感悟。又是一次收穫的過程!!!
    總的來說,專案程式碼設計做到:命名清晰易懂,抽取公共部分獨立成類,介面或方法,功能儘量細化(單元化,模組化)----終極目標:高內聚,低耦合,高效率,低耗能!!!!!
    


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29900383/viewspace-1363485/,如需轉載,請註明出處,否則將追究法律責任。

相關文章