一個菜鳥在程式碼重構中的感想
最近在對我兩個月前的程式碼進行修補,由於發現存在許多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.經驗不足,編碼前期分析設計不到位
修改的過程雖然是痛苦的,但是並非毫無收穫的,至少知道自己存在的缺點,和優點,知道哪裡需要提升,其次改的過程中,也有一些新的專案感悟。又是一次收穫的過程!!!
總的來說,專案程式碼設計做到:命名清晰易懂,抽取公共部分獨立成類,介面或方法,功能儘量細化(單元化,模組化)----終極目標:高內聚,低耦合,高效率,低耗能!!!!!
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 《重構——改善既有程式碼的設計》感想
- 寫一個菜鳥裹裹小程式吧
- 前端重構感想前端
- 一個在駭客界引起轟動的菜鳥教材---跟我學程式設計系列(轉)程式設計
- 菜鳥的架構師之路架構
- 一個菜鳥管理的學習和思考(一)
- 一個菜鳥對密碼學的理解 (4千字)密碼學
- 最近專案重構的一些感想
- Linux“菜鳥”到“菜鳥的一些建議Linux
- 劉遄:作為一名新人讀完《鳥哥的Linux私房菜》的感想Linux
- 作為一個菜鳥程式設計師跳槽可行嗎?程式設計師
- 一個phper做小程式的感想PHP
- 程式碼重構:類重構的 8 個小技巧
- 硬核乾貨:一位菜鳥碼農的架構師“封神”之路!架構
- 一個菜鳥管理的學習和思考(二)
- 菜鳥學EJB(二)——在同一個SessionBean中使用@Remote和@LocalSessionBeanREM
- 【菜鳥讀原始碼】halo✍原始碼學習 (一)原始碼
- Lambda和清潔程式碼的一個重構案例 - frankel
- 程式碼重構:函式重構的 7 個小技巧函式
- 菜鳥如何成為一個高效程式設計師的成長之路程式設計師
- 菜鳥一隻,如何提高系統架構能力架構
- 重構程式碼的7個階段
- 給每個菜鳥程式設計師的修養之道程式設計師
- 遊戲菜鳥張一鳴遊戲
- 問個菜鳥-高手問題
- 菜鳥譯文(一)——Java中的繼承和組合Java繼承
- 從菜鳥碼農到Java架構師——成長指南Java架構
- Laravel Enlightn 一個免費的程式碼重構小助手Laravel
- 高效重構 C++ 程式碼(中)C++
- 程式碼重構-業務中臺化
- 菜鳥程式設計師都是怎樣寫程式碼的?你也可以學一手程式設計師
- 【菜鳥學Java】5:“徒手”建立一個Web應用JavaWeb
- 菜鳥也談js(一)——ES6解構物件篇JS物件
- 菜鳥學習SHELL第一課---地址本的指令碼(轉)指令碼
- 程式設計師菜鳥面試攻略程式設計師面試
- 程式碼重構--大話重構
- 記一次程式碼重構
- 程式碼重構