生活随笔
收集整理的這篇文章主要介紹了
代码中的坏味道
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
寫了半年的代碼,對面向?qū)ο筮€是只有個初步的了解,還不能達到熟練運用的地步,但是從半年的編碼中,隱隱約約感覺到影響代碼結(jié)構(gòu)的壞味道的代碼。
首先就是重復代碼,一個程序中重復代碼過多,導致維護時一旦修改就需要將所有重復的代碼都修改一遍。尤其是一些邏輯復雜的代碼或者參數(shù)過多的代碼,很容易出現(xiàn)某個個地方的修改不對或沒有修改到等問題。屬性放置的位置不對,例如UpdateUI作為UI的控制器,直接將UI中的一個Window的Panel定義為UpdateUI的屬性,雖然這樣做在UpdateUI中很方便的就能操作Panel,但是UpdateUI作為整個UI的控制,并不一定只針對一個Window,如果UpdateUI控制多個Window,就會導致UpdateUI中屬性過重,且大部分都是對當前Window沒有用的屬性。類的職責定位不清晰,如Window用來構(gòu)建窗口,那么關于業(yè)務的邏輯就不應該還放在UI(Window)中,例如開啟統(tǒng)計的方法應該屬于UpdateUI,Window的作用就是創(chuàng)建各種UI和保存子組件的引用。 對應的措施如下:
重復的代碼盡量提取到一個方法中,通過調(diào)用新加的方法來解決代碼重復的問題;兩個類中的有許多類似的方法,可以考慮將兩個類抽象出一個公共的抽象父類,將重復的方法定義為父類的方法;如果兩個類之間不是同一中類型,即不適合使用繼承公共的抽象類,可以使用組合的方式解決重復代碼的問題,比如A和B中都定義了a方法,且A中有B類的引用,可以調(diào)用A.a()的位置都修改為通過b.a()來替換,去掉A中的a方法。移動屬性,通過組合的方法,將屬性移到具體對象的屬性中,然后將原來直接使用該屬性的地方修改為組合對象的新屬性的get方法,如果存在給移動屬性賦值的情況就使用組合對象的新屬性的set方法。將界面跟數(shù)據(jù)分開(MVC,聽到的很多,其實理解不深),首先在Window類中,應該只有UI組件的定義、布局,具體的數(shù)據(jù)填充應該通過一個控制類來完成例如UpdateUI。Window類中包含了一個UpdateUI的實例,當操作Window中的控件,涉及到數(shù)據(jù)操作或者界面刷新時統(tǒng)一通過組合對象調(diào)用UpdateUI中的方法來實現(xiàn),這樣關于數(shù)據(jù)的處理(業(yè)務邏輯)始終只在UpdateUI中完成,將Window和數(shù)據(jù)分開了。Window相當于V,UpdateUI對應C。 僅僅是我在重構(gòu)項目的一些體會,沒有什么條理,講的也不太清晰,見諒。
轉(zhuǎn)載于:https://www.cnblogs.com/guanmu/p/4237809.html
總結(jié)
以上是生活随笔為你收集整理的代码中的坏味道的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。