# MVVM 分享
#### 電商資訊科 陳致琦
---
MVC 有什麼問題?
---
理想中的 MVC
![](https://i.imgur.com/0v6qvQs.png)
---
在 iOS 上的 MVC
![](https://i.imgur.com/CZx2LhG.png)
* Massive structure
* Test is not eazy with UI
---
![](https://i.imgur.com/B1hFXsm.png)
---
聽說 MVVM 可以解決 MVC 的問題!!
| | Testable | Readable | Easy of use |
| -------- |:--------:|:---------:|:-----------:|
| MVC | | ? | V |
| MVVM | V | ? | |
---
![](https://i.imgur.com/eBV4VKJ.jpg)
---
源自於 Windows
![](https://i.imgur.com/etWmWNT.gif)
---
看起來很棒,但是要怎麼實作 ?
![](https://i.imgur.com/hpH8YN1.jpg)
---
* 坦白講,光 Binding 我就炸了
* ReactiveCocoa
* RxSwift
* ReactiveSwift
---
架構變得更亂,一個月後我看不懂自己在寫什麼!
---
重點是,連原來的 Code 怎麼寫都忘啦!!
![](https://i.imgur.com/ABcyeGu.jpg)
---
* 別說那麼多了,先來看 Demo 吧
* ViewModel
* Call Service API
* Model Mapping ViewModel
* Binding
* Testing
---
看完 Demo 後,思考一下...
---
你覺得 MVVM 主要在解決什麼問題?
---
UITest
![](https://i.imgur.com/E3GCQkF.png)
---
Test with MVVM
![](https://i.imgur.com/OB5y7tG.png)
---
關於 Testable,MVVM 效能完勝!!
0.0195秒 vs 24秒
---
UITest 跑完 1 個測試案例的時間約 8 秒
相當於
MVVM Test 可跑完 1230 個測試案例
---
若 UITest 要跑完 1230 個測試案例
需 9846 秒,約 2.73 小時
---
MVVM 可以提高測試覆蓋率嗎?
---
UITest
![](https://i.imgur.com/j9SDMgG.png)
---
Test with MVVM
![](https://i.imgur.com/8QaqBB9.png)
---
MVVM 覆蓋率會降低,但是...
覆蓋率高並不代表測試品質就是好的
---
MVVM 真像網路上說的,能用來解決架構混亂的問題嗎?
---
![](https://i.imgur.com/pRt8nN5.jpg)
---
有沒有其他方法可以達到相同目的?
---
* 程式瘦身
* Abstract
* Protocol
* Extract Function
* 整理分類
* Extension
---
實作 MVVM 一定要做 Binding 嗎?
---
Single Source of Truth
---
* 重點是 ViewModel,不是 Binding
* 複雜度會提高,請謹慎使用
* 若沒有 UI 狀態即時連動的需求,可考慮不用
---
Thanks for your listening!
{"metaMigratedAt":"2023-06-14T22:27:10.658Z","metaMigratedFrom":"Content","title":"MVVM 分享","breaks":true,"contributors":"[{\"id\":\"0d5eba00-e8f9-43c8-b642-762bc7fdbdec\",\"add\":5255,\"del\":3454}]"}