MVC v.s. MVVM 學習筆記

2024/01/10閱讀時間約 3 分鐘

老梗的MVC v.s. MVVM🥸

紀錄個人理解,有錯請不吝糾正,感謝

MVC(Model-View-Controller)

MVC

MVC

  • Model:
    • 負責資料儲存、型別定義,當資料有變化時,通知controller
  • View:
    • 呈現UI畫面,接收使用者的輸入,通知controller
  • Controller:
    • Model和View之間的中介,接收使用者的輸入,然後根據這些輸入對Model進行操作,最後更新View以反映Model的變化。

優點:

  • 三大職責分離
  • View/Model可被重用

缺點:

  • 實際上商業邏輯跟UI容易混雜
  • 難寫測試

MVVM(Model-ViewModel-Model)

MVVM

MVVM

  • Model:
    • 跟MVC的Model一樣,負責資料儲存、型別定義。
  • View:
    • 跟MVC的View一樣,負責呈現用戶界面,與MVC中的View相似。
  • ViewModel:
    • 作為View和Model之間的連接器,管理View所需的數據和狀態。使得View與Model解耦合,同時負責為View提供可綁定的數據。
最主要差異為用資料驅動view的更新(Data Binding),當資料異動時,去更新view

優點:

  • 商業邏輯跟UI可分開,比較不會出現Massive View Controller的問題
  • 容易寫測試

缺點:

  • Data Binding 會導致較大的記憶體消耗
  • View跟VM綁定,難重用

MVC v.s. MVVM最大差異?

個人覺得是在Controller跟ViewModel的更新的行為。

MVC收到通知需要Controller主動去觸發更新,MVVM則因為已經跟資料綁定,當資料的狀態發生變化時,ViewModel會被通知,然後通過綁定自動更新相應的View。這種更新是被動的,因為是由綁定機制隱式地觸發和管理的。

MVVM的商業邏輯應該寫在哪?

有人說可以寫在VM裡,有人寫在VM很差要寫在Model。

我覺得可能要看複雜度來決定,VM的主要功能是把原始資料轉換成給View顯示用的資料。如果邏輯跟這個View有關是OK的。但如果是與這個View無關的邏輯的話(Application logic),可以在VM和Model中間再做一個service layer,這個service也屬於Model的一部分。


參考資料:

https://ithelp.ithome.com.tw/articles/10289734

https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html

https://front-chef.coderbridge.io/2021/02/27/mvc-mvvm/

https://stackoverflow.com/questions/37671866/should-i-implement-business-logic-on-a-model-or-a-viewmodel

https://softwareengineering.stackexchange.com/questions/429244/the-right-place-for-app-logic-in-mvvm-context

5會員
21內容數
紀錄iOS開發上遇到的問題或是一些流程筆記。主要都是Swift。
留言0
查看全部
發表第一個留言支持創作者!