相依注入DI(Dependency Injection)

為了降低代碼本身的耦合,也為了讓代碼更好測試,這裡我們需要引入DI(Dependency Injection,依賴注入)解耦合。

1.把想測試的方法弄成protocol,之後就可mock這個protocol進而測試該方法。

2.初始化init時注入

3.用Property時注入,ex lazy init

4.方法參數時注入

其他相依注入方法請看 https://www.objccn.io/issue-15-3/

對於以上幾種公開注入點的注入方式,比如說初始化注入,屬性注入,以及方法參數注入等都會讓人有一種破壞程序封裝性的感覺。我們總有一種想要掩蓋依賴注入銜接點的想法,這是可以理解的,因為我們知道這些銜接點是專門為單元測試準備的,它們並不屬於API 業務範疇。所以可以將它們聲明在category 中,並且放到一個單獨的頭文件裡。

 

是不是覺得為了達到測試目標不得已公開了許多不應公開的內部實現?首先,需要判斷一下基於你的代碼中現行所公開的API 是否能夠支撐完成測試代碼編寫(快速且確切)。如果不可以,並且你需要去操作那些本來是隱式的依賴對象,這說明很可能有其他的類也需要操作它。所以應該大膽將其抽象,把它當作依賴對象使用並進行單獨測試。

 

廣告

[Design pattern] MVVM

MVVM(Model,View,ViewModel)

MVC的mediator是controller.

MVVM的mediator是viewModel.

view:view/viewController >> own viewModel >> own model.

ex: 在tableView裡面cellForRowAt 直接塞viewModel給model,變得vc直接跟物件溝通(viewModel),而不是直接跟model溝通。

所以資料傳回來則為反方向model > viewModel > view 單一方向性。

Model不再與view耦合。(not like MVC, model coupling with view)

所以重點viewModel裡面到底放什麼?

1.放呈現view的邏輯跟狀態.

2.Raw data一開始都不太能用,所以也可放raw data轉成可用的資料邏輯。

Continue reading “[Design pattern] MVVM"