溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

手游mvc框架介紹

發(fā)布時間:2020-06-01 11:05:24 來源:億速云 閱讀:314 作者:Leah 欄目:游戲開發(fā)

這篇文章的知識點包括:手游mvc框架的簡介、手游mvc框架的事件機(jī)制、依賴關(guān)系的介紹以及手游mvc框架的簡單實用,閱讀完整文相信大家對手游mvc框架有了一定的認(rèn)識。

一 、分工
這里的mvc,m代表model(數(shù)據(jù)模型),v代表view(界面),c代表control(控制業(yè)務(wù)邏輯)。除此之外,mvc一般必須要實現(xiàn)的是事件機(jī)制或者觀察者模式。
1.view的職責(zé)包括
a. 顯示數(shù)據(jù)。這里的數(shù)據(jù)可以分為簡單數(shù)據(jù)(不用處理的)和需要處理的數(shù)據(jù)。也可分為只顯示一個系統(tǒng)的數(shù)據(jù)和顯示多個系統(tǒng)的數(shù)據(jù)。這個在后面討論到依賴關(guān)系和例子的時候,會詳細(xì)說到。
b.更新顯示的數(shù)據(jù),通過監(jiān)聽事件。
c.接收玩家的輸入,并將輸入交給control進(jìn)行處理。

  1. control的職責(zé)包括:
    a.組織view上的數(shù)據(jù)。
    b.接收view傳過來的玩家輸入,自己根據(jù)需求做必要的業(yè)務(wù)邏輯處理。這些業(yè)務(wù)邏輯包括彈出其他界面或者提示,更新某些界面(一般通過事件機(jī)制通知),調(diào)用一個或多個model的方法進(jìn)行各自的處理等。
    c.control是作為一個中介者,即view和model不能有耦合,而是通過control這個中介者進(jìn)行交互。
  2. model的職責(zé)包括:
    a.保存數(shù)據(jù)。一般包括服務(wù)器的數(shù)據(jù),和其他一些需要用到的數(shù)據(jù)。
    b. 跟服務(wù)器進(jìn)行通信,當(dāng)服務(wù)器的信息有變化時,需要發(fā)送事件通知view或control。也有一些看法是要把這部分的邏輯放在control里面,但是我覺得這是跟數(shù)據(jù)密切相關(guān)的,所以應(yīng)該放在model這里處理。
    c. 根據(jù)control的輸入(源自玩家的輸入或者control處理過的數(shù)據(jù)),做對應(yīng)的邏輯,例如跟服務(wù)器通信或者根據(jù)需求更新自己的數(shù)據(jù)。
    d.當(dāng)數(shù)據(jù)變化的時候,要通知view或者control。

二、事件機(jī)制。
mvc中必須要實現(xiàn)的是事件機(jī)制或其他方式實現(xiàn)的觀察者模式。事件機(jī)制使得mvc之間可以大大的解耦,因為發(fā)送事件的一方和接收事件的一方,完全不需要知道對方的存在。

  1. view 可以監(jiān)聽事件和發(fā)送事件。
  2. control 同樣可以監(jiān)聽事件和發(fā)送事件。
  3. model 只可以發(fā)送事件。

三、依賴關(guān)系
mvc之間的依賴關(guān)系很少被文章或者人們談?wù)摚彩谴蠹彝惶⒁獾牡胤?,但是這是及其重要的。
依賴關(guān)系的討論包括:view與view,view與control,view與model,control與control,control與model,model與model。

  1. view與view。view與view之間不應(yīng)該有任何的依賴關(guān)系。但是一個界面可以通過發(fā)送事件來通知另一個界面進(jìn)行更新。
  2. view與control。一個view一般只會依賴于一個control,一個control可以被多個view依賴。
  3. view與model。雖然mvc的實質(zhì)是,通過view去顯示和更新model的數(shù)據(jù),但是view和model之間不應(yīng)該有依賴關(guān)系。對于簡單數(shù)據(jù)(可直接用的),view可通過自己依賴的control(control一開始可依賴一個model)上面的model引用,直接拿取該model里面的數(shù)據(jù)。對于需要處理的數(shù)據(jù),一般都通過view所依賴的control的依賴方法來獲取到自己想要的數(shù)據(jù)。
  4. control與control。control與control之間一般不要有依賴關(guān)系,就算有,也應(yīng)該謹(jǐn)慎的考慮是否必要。
  5. control與model。control可依賴多個model,但是model不應(yīng)該依賴于control。在某些情況下,一個view可能需要展示多個系統(tǒng)的數(shù)據(jù)或者與多個系統(tǒng)的數(shù)據(jù)進(jìn)行交互,這個時候,可以新建一個新的control,這個control作為中介者與多個model進(jìn)行交互。
  6. model與model。model絕對應(yīng)該是獨立的,model與model之間不應(yīng)該有任何的依賴關(guān)系。

四、實現(xiàn)細(xì)節(jié)

  1. view用ViewManager管理起來,ViewManager要保存一個字典,key是view的名字,value是view的實例。control用ControlManager管理起來,ControlManager要保存一個字典,key是control的名字,value是control的實例。model用ModelManager管理起來,ModelManager要保存一個字典,key是model的名字,value是model的實例。ViewManager、ControlManager、ModelManager可以再通過外觀模式進(jìn)行進(jìn)一步的封裝,即規(guī)定系統(tǒng)不直接調(diào)用ViewManager、ControlManger、ModelManager的接口,而只能調(diào)用他們的外觀類App的方法。
  2. mvc之間的依賴關(guān)系盡量只依賴于名字,而不要依賴于具體的實例。以view和control之間的依賴舉例。我見過的一些項目會這樣處理他們的依賴關(guān)系。
    手游mvc框架介紹
    這樣的實現(xiàn),就把依賴關(guān)系變?yōu)関iew的實例依賴于control的實例。這樣的話,如果view的實現(xiàn)一樣,只是需要依賴不同的Control,那么在重用的時候,可能需要復(fù)制一份同樣的代碼。比這個更好一點的處理方法是在構(gòu)造函數(shù)里面指定自己的control實例:
    手游mvc框架介紹
    這是一種比較的實現(xiàn)方式,當(dāng)發(fā)生前面的那種情況的時候,只需要新建一個類繼承這個類,然后重寫setControl方法。
    但是更好的處理方法應(yīng)該是下面的這種,只依賴于名字:
    手游mvc框架介紹
    這樣,control的名字通過構(gòu)造函數(shù)注入。當(dāng)發(fā)上上面的需求的時候,只需要增加一個另外的view的配置即可。
  3. view的顯示問題。view需要顯示數(shù)據(jù)可分為:
    a.簡單數(shù)據(jù)(不用處理的)。對于這種情況,可以直接通過control的model引用來獲取。例如componetA.text = myControl.model.dataA。
    b.需要處理的數(shù)據(jù)(排序或者數(shù)據(jù)不能直接顯示,需要轉(zhuǎn)換)。這種情況會通過control的一個方法獲取。例如componetA.text = myControl.getDataA()。

看完上述內(nèi)容,你們對手游mvc框架有進(jìn)一步的了解嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI