多人都會說,凡事不能走極端,走了極端就過猶不及。所以應該分層,但不能過分分層,應該視具體情況來定。這樣的話聽起來很有道理,卻只是一句廢話。當我們遇到問題時,還是摸不著頭腦!
看看知名的架構師是怎麼說的吧!來自蔡學鏞
我做(開發)架構的幾個原則,根據優先次序高低排列:1. (邏輯)拆分越細越好 2. 依賴關細越少越好 3. 互動越少越好 ... 相互矛盾時,如果沒有特殊理由,以優先權高者勝出。由此啟發,我覺得設計架構應該拆的越細越好。這樣做有如下幾點好處:
ios說到分層,有幾種常見的做法。
這些分層看起來五花八門,但實質並不衝突。最近讀了一篇文章,深受啟發,在其模式的基礎上修改了乙個自己的架構模式,暫且稱之為vpbd。廢話不多說,線上架構圖:
下面說說各個模組分別幹了什麼?
講模式不能光說不練,所以我決定寫乙個demo來實踐這一模式。
國慶過來加了3天班,總算寫了乙個demo,因為基於目前公司產品的後台,所以**就不貼了。講講思路就好。
最終的版本比上面圖中,做了一些妥協,主要是把presenter和router拿掉了。因為目前的專案互動都比較簡單,而presenter和router都是處理互動相關**的,所以即使寫出來**也很少。下面是結構圖:
在最早的**中,viewcontroller、business、viewmodel都是寫在viewcontroller裡面的,這樣遲早是要把viewcontroller寫爆的。為了i面viewcontroller複雜化,我就把它拆成了3個部分。
viewcontroller
負責view生命週期的管理、檢視跳轉、以及使用者事件的接收。
business
負責所有的業務邏輯,它不需要知道view是怎樣的。view需要的資料結構會通過viewmodel來定義,所以business就是處理邏輯,並把最終資料轉換成viewmodel,拋給viewcontroller即可。這個過程中轉換成viewmodel比較簡單,最核心的是定義業務邏輯。即這個模組是幹嘛的。舉個例子:
@inte***ce hjshopmodule : nsobject
@property (nonatomic,strong) hjshopqueryconfig* queryconfig;
@property (nonatomic,copy) nsstring* currentshopid;
- (void)getshoplistonsuccess:(responsearray)successblock
onfailure:(responsestring)failureblock;
- (void)getshopdetailonsuccess:(responseobject)successblock
onfailure:(responsestring)failureblock;
@end
上面定義的是乙個商店模組,就是商店相關的任何邏輯都應該在這裡。乙個商店模組能幹嘛?這需要從需求出發。
根據以上兩個需求,我先把篩選條件封裝成乙個物件(篩選條件多且複雜),然後呼叫getshoplist方法,該方法會篩選條件解析出來,並向後台請求,請求成功再將資料封裝好,丟給viewcontroller。同理,檢視商店詳情,同樣只需要呼叫乙個介面。這裡雖然只寫了兩個,但是真實情況會有很多介面,比如收藏商店、分享商店......業務需求有多少,這裡就要加多少。因為寫在這裡的方法都差不多,所以可讀性、維護性都會比較好。
viewmodel
我這裡的viewmodel和mvvm中的viewmodel不太一樣。我這裡的viewmodel其實是model的延伸。我們定義model的時候是根據業務來定的。而viewmodel是根據view的展示需求來定的。兩者只是結構上的不同,並沒有本質差異。假如viewmodel會增加一些類,但是viewcontroller就不用再做繁瑣無聊的資料轉換了。
用了這個模式,viewcontroller得到了很大的簡化,但是以後可能還會有複雜化的問題。尤其是當頁面的互動邏輯變得複雜的時候。這時候需要把互動再抽象出來,就像最上面的一張圖。但目前我覺得這是沒有必要的。
iOS架構設計與分層
多人都會說,凡事不能走極端,走了極端就過猶不及。所以應該分層,但不能過分分層,應該視具體情況來定。這樣的話聽起來很有道理,卻只是一句廢話。當我們遇到問題時,還是摸不著頭腦!看看知名的架構師是怎麼說的吧!來自蔡學鏞 我做 開發 架構的幾個原則,根據優先次序高低排列 1.邏輯 拆分越細越好 2.依賴關細...
iOS設計模式與架構設計
ios開發中常用的設計模式有以下幾種 1 mvc模式 2 委託 模式 3 觀察者模式 架構設計 好的架構設計可以提高開發效率 減少 冗餘 提高元件模組的可復用性等優點。ios開發中通常採用是是分層架構設計,其目的是降低耦合,同時提高應用的可復用性 可擴充套件性。1 表示層 ios中的表示層是由uik...
資料倉儲分層架構設計
大資料資料倉儲是基於hive構建的資料倉儲,分布檔案系統為hdfs,資源管理為yarn,計算引擎主要包括mapreduce tez spark等,分層架構如下 1 資料 層 日誌或者關係型資料庫,並通過flume sqoop kettle等etl工具匯入到hdfs,並對映到hive的資料倉儲表中。2...