隨著開發工作的增長,對于代碼質量的提高顯得尤為重要。我認為在提高代碼質量中,最為立竿見影的就是要有一個好的項目架構,而好的架構中最重要的就是一個好的設計模式。本篇結合我個人對設計模式的理解,持續更新中。
一、常用設計模式
常用的設計模式有:MVC、MVP、MVVM。
二、各設計模式介紹
1.MVC模式
MVC設計模式是在開發中最經常用到的設計模式,而蘋果官方也推薦使用MVC設計模式。MVC設計模式分為兩種,一種是傳統的MVC,一種是蘋果MVC。
如上圖就是傳統MVC的架構:
controller層持有View和Model,View和model之間還有依賴。其中View層是無狀態的,即它不做任何信息記錄,只負責展示信息。但此模式有個很大的弊端,就是MVC各層耦合度太高,每一個實體都要和其他兩個實體產生關聯,無法進行測試和復用。
接下來是蘋果推薦的MVC架構:
此架構和傳統架構的最大區別就是將View層和Model層進行分離,即View層和Model層沒有耦合性,其中View層和Model層的交互都由C層代為中轉。這樣造成C層代碼量很大,所以很多人說蘋果推薦的MVC為重控制器模式,看下圖會清晰很多:
如上圖,其實此MVC模式的中C層和View層在View的生命周期中相互依賴,以至于很難將他們分開,也正由于此,所以導致MVC的代碼不可進行單元測試,因為在面對單元測試中,難以獨立開MVC的耦合關系。在不調用視圖控制器生命周期方法的前提下,不可能對視圖控制器進行測試。
2.MVP模式
如上圖,MVP模式中新增了一個Presenter層。回想一下MVC中View和Controller緊緊耦合在一起的位置,在MVP中是Presenter,它與視圖控制器的生命周期沒有任何關聯,并且由于沒有任何布局的代碼,很容易模擬視圖View。它的職責是更新View中的數據和狀態。
3.MVVM模式
它和MVP模式很像:視圖控制器劃分成View、View和Model之間沒有緊密的耦合。
此外,數據綁定的概念很像帶監控器的MVP,不同的是這次綁定的是View和ViewModel,而不是View和Model。那么在實際的iOS開發中ViewModel是什么?從根本上來說,它是獨立于UIKit能夠展現你的View和狀態。ViewModel可以調用Model來改變數據,也可以通過數據變更來更新自己,因為View和ViewModel進行了綁定,相應地也就能同步更新View。
三、總結
好的設計模式可以提高程序的復用性、減低程序的耦合性。但是也不要盲目的追求設計模式,因為每種設計模式都有自己的優缺點,所以選擇當前項目中適合自己的設計模式顯得非常重要。