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...