從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`
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.