編碼反模式

2021-08-27 15:30:36 字數 2031 閱讀 7149

1)通用方法

乙個方法處理多個業務,比如修改使用者傳入乙個使用者物件,方法根據郵箱,手機..是否為空來處理修改手機,郵箱等業務

處理方法:每個業務要分開,單一職責

2)物件內的平行方法

a(a1,a2,a3),a1,a2,a3

方法中有相似功能。

ia(a)

ßa(a,abstract b)

ßa1(b),a2(b),a3(b)

3)業務鏈方法

乙個業務的鏈式判斷用方法呼叫來實現,比如使用者登入,先判斷是否是使用者名稱-》別名-》密碼。

方案二:用責任鏈或裝飾器模式來處理。

兩個沒有特別明顯的優略,但如果是乙個業務的重要邏輯,方案二有明顯優勢。

4)混亂**

很多類,對像協調來做一件事,每個類只是乙個框子,**間呼叫複雜。

最差的一種**,用物件導向的架子來裝下面向過程的**,過程分的還不清晰。

處理方案:兩條線索,1從重複**入手重構(示例遷徙程式)。2.從不合理呼叫鏈條重構(示例畫圖模型和前台ui耦合重構)。

更進一步再是類的單一職責。

5)混亂物件

物件轉化多次來做一件事。比如轉成乙個批量bean的臨時物件,再生成批量bean,再生成乙個批量bean的集合。

處理方法:找出有效轉化,去除無效轉化。

6)執行緒濫用

到處是多執行緒協作。

處理方法:找到系統瓶頸,多執行緒的使用原因,去除對系統無貢獻的多執行緒。

7)提前調一下

呼叫方法a之前必須呼叫b方法,如畫圖前,要呼叫設定螢幕資訊以及畫布大小相關的方法。

處理方法:把b做成介面讓相關類依賴,呼叫a時傳入相關b介面實現。

8)雙向依賴

解除雙向依賴,a->b b-a  

方法一:使用依賴倒置原則。(把a中被b依賴的進行抽象放入b中)

方法二:新建立c,把a中被b依賴的放入c。

例:畫圖程式前台依賴於畫圖模型,畫圖模型需要依賴前台畫素大小。畫圖模型依賴於screeninfo介面,前台類構建screeninfo實現傳入模型。

此例子中不適用方法二,因為只有畫的時候才能得到螢幕資訊。

9)業務關注快取

業務當中耦合快取相關**

處理方法:業務不應該關注資料的儲存實際介質,下層提供透明的介面,實現repository有些理想化。可以在快取和資料庫之上簡歷乙個façade來透明化介面。

10)分層清晰,物件多

分層清晰,但業務鬆散,過程化物件多,但呼叫關係多過所做事情。

處理方法:提高業務物件的內聚性。

此處很有代表性,這類**應該算是面向過程中比較好的**了。很好的體現了領域驅動和過程化驅動的差異。物件更合理。

11) threadlocal大量使用

**不好閱讀,threadlocal能不用就不用。在一些地方能畫龍點睛,比如資料庫連線。但別代替方法傳值。

12)重構半天跑不起來了

程式混亂,並且無單元測試。重構要小步,先加新功能再刪除原來的功能,並且要分成幾步(足夠小),每步讓程式能跑起來可測試。比如用乙個傳值結構替換原來的傳值結構,要先加新的變數,但不要刪除原來的變數,然後用新變數乙個屬性在這個方法中的呼叫來替換原來的變數引用。 又如,畫圖程式中新的畫圖邏輯乙個線乙個點的替換原有邏輯。先注釋原邏輯中的一點**,讓功能消失,用新邏輯實現,再測試。

ios地理編碼 反地理編碼

1.地理編碼 給定乙個名字 北京 獲得給定名字對應的位置 經緯度 2反地理編碼 給定義個位置 經緯度 獲得這個位置對應的詳細資訊 國家 省 街道 樓 import viewcontroller.h import inte ce viewcontroller end implementation vi...

關於地理編碼與反地理編碼

clgeocoder 地理編碼器,其中geo是地理的英文單詞geography的簡寫。1.使用clgeocoder可以完成 地理編碼 和 反地理編碼 地理編碼 根據給定的地名,獲得具體的位置資訊 比如經緯度 位址的全稱等 反地理編碼 根據給定的經緯度,獲得具體的位置資訊 1 地理編碼方法 void ...

iOS 地理編碼和反地理編碼

1.ui搭建,import標頭檔案 2.新增成員變數,並連線 1 ibaction geocodebutton 2 property weak,nonatomic iboutlet uitextfield inputaddress 3 property weak,nonatomic iboutlet...