input equal: output
背景
- 近期在網上翻閱了大量的資料去查找iOS中架構的相關文章,但文章很少,大部分都是java相關的。雖然平臺語言不一致,思想總歸相同的。然而從代碼結構方面,應用到iOS平臺仍舊感覺有點怪怪的。
- 當然也在網上找到了相關iOS架構資料,但是文章談到架構優化的點都有自己的思考,自己拿過來應用也很難去考慮整體。因此無不感嘆他們好牛逼,就想去探索一下他們達到這種程度的前置知識。
- 看到里邊涉及到的點,就去找了相關的書籍進行翻閱學習。其中主要看了兩本書:
HeadFirst 設計模式
,App架構設計
。當再去看網上的其他文章、源碼后,終于能夠看透一些背后應用的思想。 - 本文是關于 App架構設計 這本資料看完之后的總結,方便日后進行查看。
- HeadFirst 設計模式,也會在之后的文章中進行總結,方便日后的查看。
本文按照自己的記憶點簡單精簡羅列一下本書中學習到的內容
常見架構
mvc: v -> c -> m
mvp: v -> c -> p -> m
mvvm: v -> c -> vm -> m
mvc+vs: v -> c -> vs -> m
可以看出:mvp,mvvm,mvcs都是在mvc的基礎上進行擴展的。換句話說,他們是mvc的強化版本。
以一個view上的button舉例:
1. mvc
action: -> v -> c -> m; m -> (notification) -> c -> (update) -> v
network/other moudle:是從c開始進行觸發,然后后續的執行流程和action一樣的。
- c持有v和m。而v和m之間又是相互獨立的模塊。
- 當點擊v上button時,將點擊方法傳遞到了c層進行響應;由于c擁有m,因此在c中調用更新m的方法;
- 當m中的內容發生變化時,c作為m層數據發生變化的監聽者。c會收到發生變化的通知,然后在c層開始相應的通知方法;由于c擁有v,則在通知的響應方法中,去調用v中的方法,從而v將會得到更新。
以下的幾種模式,是從mvc演化而來,他們是在v和m中加入了自己的隔離層進行處理。
2. mvp:
action: v -> c(pro) -> (action最終轉發到p層) -> p -> m; m -> (notification) -> p -> (更新c層的屬性) -> c -> v
- p層持有c層和m層。
- c層是遵循某個協議pro。而pro中暴露的接口是v要展示的內容
3. mvvm
action: -> v -> c -> vm -> (update) -> m; m -> (notification1) -> vm -> (notification2) -> c -> (update) -> v
- c持有v和vm。vm持有m。
- vm的模塊將為v層提供展示邏輯邏輯的接口。
- c層時刻監聽vm中暴露屬性的通知變更。
- 3也可以表述成:vm提供了變化的observable序列,供c層進行訂閱,當subscribe到新的值后,c層進行更新v的數據。
4. mvc+vs
- viewstate中存儲當前的狀態信息
- 在mvc的基礎上,時刻保持v中的狀態信息,那些信息當前并沒有去更新model。
- 將這些信息更新到viewstate中。
- 在view觸發時,去將vs中的值更新到model中。