1. 程式人生 > >Unity3D的MVC框架(一)——StrangeIOC與Extension的擴充套件介紹

Unity3D的MVC框架(一)——StrangeIOC與Extension的擴充套件介紹

Unity3D的MVC框架(一)——Strange IOC與Extension的擴充套件介紹

StrangeIoC框架是一個超輕量級和高度可擴充套件反轉(IOC)框架,專門為c#和Unity編寫,它是基於MVC框架擴充套件的。即MVCS框架。M(models),V(view),C(controller),S(services)。詳細的資訊可以檢視其官方文件。 作為一款依賴注入/控制反轉(IOC)的MVC框架,StrangeIoC除了使我們的程式結構更加解耦合理外,還為我們提供了大量方便的功能(這裡主要是和PureMVC進行對比)。

Extensions

該框架的應用是以extension的擴充套件為基礎的,主要的擴充套件如下:

Injection extension

Injection的擴充套件可以說是鬆耦合繫結的基礎,使邏輯和顯示分離得以實現,正如官方文件所言,很多人將StrangeIoc這套框架成為Dependency Injection框架, 這個其實是由Injection擴充套件來是實現的,具體的類圖如下: 在這裡插入圖片描述

在我們使用Injection的時候,需要注意下列事項

  1. 迴圈依賴問題,Injection框架可以幫我們檢查這樣的錯誤並且丟擲異常,但是我們最好在寫程式碼的時候防止這麼做,下面就是一個簡單的例子,在實際情況中的依賴可能比這個負責,比如,A - >B -> C- >D,而D最後又需要A。
  2. Injection 是利用反射來實現,反射比較慢,我們可以利用ReflectionBinder中的RefectAll提前來完成反射。
  3. 我們必須記住的是,任何的依賴都需要binding去記住mapping,如果我們忘記了增加Binding,就會產生空物件異常, Injection會幫助我們檢視這些錯誤。我們必須記住的是,任何的依賴都需要binding去記住mapping,如果我們忘記了增加Binding,就會產生空物件異常, Injection會幫助我們檢視這些錯誤。

Dispatcher extension

Event Dispatcher 和Singal都可以看作是Dispatcher的擴充套件,其實就是一種Observer設計模式的鬆耦合實現。基本的類關係圖如下: 在這裡插入圖片描述

在這裡插入圖片描述

本質上都是Observer的實現方式,下面的Command extension 和Mediator extension都會用Dispatch將MVC設計模式中的M,V,C聯絡到一起。

Command extension

Dispatch是將Event繫結在方法上,而Command extension是將Event繫結到具體的Command上,Command的使用應該是MVCS設計模式中的Controller(C),基本類之間的關係如下: 在這裡插入圖片描述

CommandBinder可以將具體的Event或者Signal來繫結到具體的Command上,其負責利用Event或者Signal來找到,或者建立一個Command。

Mediation extension

Mediation 擴充套件是整個StrangeIoc框架中唯一依賴Unity3D的API的擴充套件,這是因為mediation是用於處理顯示(Views,GameObject)和除顯示外的應用程式邏輯的。在這個框架中,其把顯示部分分成了View和Mediator,具體的類層次關係如下: 在這裡插入圖片描述

Context extension

Context extension 是整個strangeIoc 的MVCS框架應用的基礎,其組合了前面所有的extension,具體的關係如下圖 : 在這裡插入圖片描述

關於StrangeIOC框架的具體用法,在下一節我們會具體介紹。