從MVC到MVVM,再到MVVMC的開發經驗分享 - 黃惠勤 === {%hackmd FGRWt1UuTFKk0wSbGgg-SA %} > 請從這裡開始 ## YouTube {%youtube 0GQXVfahdI4 %} ## Slide {%slideshare NgHuiQin1/mvc-mvvm-mvvmc-sharing-iplayground-2019 %} ## 前言 我沒有要說很多MVC的壞話 MVC其實是很多巨頭APP的根基 ## 簡介 常犯的問題 MVVC解決什麼問題 要注意的問題 ### MVC 常見的問題 controller 責任太多 ### 如何減少ViewController的負擔(作代碼分類) * 有些職責讓Model去做 * 模組化 * 避免singleton * Extension(Category) #### 程式的品質 Code Quality * unit test (performance那麼高? 請給我加薪!?) * 但是MVC寫測試會遇到瓶頸 * 補充:ViewController的職責太多難以去寫測試 ### 將程式轉移到ViewModel * Test Case單純針對ViewModel測試 * 就有理由不去寫ViewController的測試(?) ### 畫面複雜時:ViewModel很肥 * 整理多個ViewModel涵蓋子畫面模組 ### ViewModel優化 * 釐清責任 * Inputs/Outputs Protocol * Binding的時候好讀 * 寫Unit Test也簡單 ### MVVMC (C - Coordinator) Sample code: https://github.com/nghuiqin/Todo-RxSwift-MVVMC ### Singleton的隱患 * 不知道誰改了他的值 * 想像一下Global Variabal的可怕性 * 寫測試的時候,他的狀態要怎麼控制 (難) #### Dependency Injection DateFormatter很貴 ### MVVMC再進化 -> 實戰心得 -> 要注意的坑 * 不建議使用Xib/Storyboard * Coordinator要注意回收的問題,原生回到上一頁時,要特別處理 ### AppDependency傳入的方法 * 由於Coordinator有層層關係: App -> B -> C -> D * 如果只有D需要,B/C也要的帶要怎麼解決 -> 請大家給建議?勿用萬惡singleton?(myAppManager) ## 結語 * 沒接觸過MVVM,可從先從MVVM開始 * 一人團隊如果沒有太多時間,MVC也不錯 #### 共筆心得 * 關於不建議使用Xib/Storyboard(講者是希望在init func可以很漂亮。但其實透過ViewController Factory的話,其實還是可以很順暢的使用xib/storyboard) * [Coordinators Essential tutorial. Part I](https://medium.com/blacklane-engineering/coordinators-essential-tutorial-part-i-376c836e9ba7) * [Coordinators Essential tutorial. Part II](https://medium.com/blacklane-engineering/coordinators-essential-tutorial-part-ii-b5ab3eb4a74) * Coordinator的作者表示,使用Storyboard話,就是完全不要用segue。因為Coordinator的核心就是,每個ViewController之間不需要知道彼此 * [How to implement flow coordinator pattern](https://medium.com/@pavlepesic/flow-coordination-pattern-5eb60cd220d5) * [被誤解的MVC與被神化的MVVM](https://www.jianshu.com/p/79591e226d8c) * Coordinator 採坑心得 * 一定要從AppCoordinator開始(appDelegate開始) * 一人團隊我覺得是最好的練習跟開始,當你可以很好的運用 * Flow Controller 參考資料 * [Navigation with Flow Controllers](https://mecid.github.io/2019/02/20/navigation-with-flow-controllers/) * [Massive View Controller 重構:Coordinator 模式與 Flow Controller](https://www.appcoda.com.tw/coordinator/) ###### tags:`iPlayground2019`