【Unity3D日常開發(fā)】(十二)Unity3d中使用MVC框架
推薦閱讀
CSDN主頁
GitHub開源地址
Unity3D插件分享
簡書地址
我的個人博客
QQ群:1040082875
一、前言
MVC是一種比較常見的設(shè)計框架,是一種將代碼的功能進(jìn)行劃分的一種設(shè)計框架,主要原理就是將軟件用戶界面和業(yè)務(wù)邏輯分離,以使代碼可擴(kuò)展性、可復(fù)用性、可維護(hù)性、靈活性加強。
MVC在桌面應(yīng)用程序,以及網(wǎng)頁架構(gòu)上面用的比較多,那么怎么應(yīng)用到Unity3d中呢,下面就帶大家去了解這個設(shè)計框架,以及如何在Unity中應(yīng)用。
二、MVC介紹
簡介
MVC全名是Model View Controller,是模型(Model)-視圖(View)-控制器(Controller)的縮寫,一種軟件設(shè)計典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個部件里面,在改進(jìn)和個性化定制界面及用戶交互的同時,不需要重新編寫業(yè)務(wù)邏輯。MVC被獨特的發(fā)展起來用于映射傳統(tǒng)的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結(jié)構(gòu)中。
Model(模型) 是應(yīng)用程序中用于處理應(yīng)用程序數(shù)據(jù)邏輯的部分。
通常模型對象負(fù)責(zé)在數(shù)據(jù)庫中存取數(shù)據(jù)。
View(視圖) 是應(yīng)用程序中處理數(shù)據(jù)顯示的部分。
通常視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的。
Controller(控制器) 是應(yīng)用程序中處理用戶交互的部分。
通常控制器負(fù)責(zé)從視圖讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù)。
MVC開始是存在于桌面程序中的,M是指業(yè)務(wù)模型,V是指用戶界面,C則是控制器,使用MVC的目的是將M和V的實現(xiàn)代碼分離,從而使同一個程序可以使用不同的表現(xiàn)形式。比如一批統(tǒng)計數(shù)據(jù)可以分別用柱狀圖、餅圖來表示。C存在的目的則是確保M和V的同步,一旦M改變,V應(yīng)該同步更新。
模型-視圖-控制器(MVC)是Xerox PARC在二十世紀(jì)八十年代為編程語言Smalltalk-80發(fā)明的一種軟件設(shè)計模式,已被廣泛使用。后來被推薦為Oracle旗下Sun公司Java EE平臺的設(shè)計模式,并且受到越來越多的使用ColdFusion和PHP的開發(fā)者的歡迎。模型-視圖-控制器模式是一個有用的工具箱,它有很多好處,但也有一些缺點。
MVC的業(yè)務(wù)流程
MVC是設(shè)計模式嗎
MVC是一種設(shè)計模式,但是卻不在Gof總結(jié)過的23種設(shè)計模式中,所以確切說MVC不是一個設(shè)計模式,而是多種設(shè)計模式的組合,而不僅僅只是一個設(shè)計模式。
組成MVC的三個模式分別是組合模式、策咯模式、觀察者模式,MVC在軟件開發(fā)中發(fā)揮的威力,最終離不開這三個模式的默契配合。 那些崇尚設(shè)計模式無用論的程序員,請了解只要你們使用MVC,就離不開設(shè)計模式。
組合模式只在視圖層活動, 視圖層的實現(xiàn)用的就是組合模式,當(dāng)然,這里指的實現(xiàn)是底層的實現(xiàn),是由編程框架廠商做的事情,用不著普通程序員插手。
組合模式的類層次結(jié)構(gòu)是樹狀的, 而我們做Web時視圖層是html頁面,html的結(jié)構(gòu)不正是樹狀的嗎,這其實就是一個組合模式的應(yīng)用,只是瀏覽器廠商已經(jīng)把界面相關(guān)的工作幫我們做掉了,但它確確實實是我們應(yīng)用MVC的其中一部分,只是我們感覺不到罷了,這也是我們覺得View是實現(xiàn)起來最簡單最沒有歧義的一層的原因。
除網(wǎng)頁以外的其他用戶界面程序,如WPF、Android、ASP.NET等等都是使用樹狀結(jié)構(gòu)來組織界面控件對象的,因為組合模式就是從界面設(shè)計的通用解決方案總提煉出來的。所以與其說MVC選擇了組合模式,還不如說組合模式是必定會存在MVC中的,因為只要涉及到用戶界面,組合模式就必定存。事實上即使不理解組合模式,也不影響程序員正確的使用MVC,組合模式本就存在于程序員接觸不到的位置。
然而,觀察者模式和策略模式就顯得比較重要,是實實在在MVC中接觸的到的部分。
觀察者模式有兩部分組成,被觀察的對象和觀察者,觀察者也被稱為監(jiān)聽者。對應(yīng)到MVC中,Model是被觀察的對象,View是觀察者,Model層一旦發(fā)生變化,View層即被通知更新。View層和Model層互相之間是持有引用的。 我們在開發(fā)Web MVC程序時,因為視圖層的html和Model層的業(yè)務(wù)邏輯之間隔了一個http,所以不能顯示的進(jìn)行關(guān)聯(lián),但是他們觀察者和收聽者的關(guān)系卻沒有改變。當(dāng)View通過http提交數(shù)據(jù)給服務(wù)器,服務(wù)器上的Model接受到數(shù)據(jù)執(zhí)行某些操作,再通過http響應(yīng)將結(jié)果回送給View,View(瀏覽器)接受到數(shù)據(jù)更新界面,這不正是一個接受到通知并執(zhí)行更新的行為嗎,是觀察者模式的另一種表現(xiàn)形式。
但是,脫離Web,當(dāng)通過代碼去純粹的表示一個MVC結(jié)構(gòu)的時候,View和Model間無疑是觀察者和被觀察的關(guān)系,是以觀察者模式為理論基礎(chǔ)的。即使在Web中因為http壁壘的原因?qū)е抡嬲膶崿F(xiàn)有點走樣,但是原理核心和思路哲學(xué)卻是不變的。
最后是策略模式。策略模式是View和Controller之間的關(guān)系,Controller是View的一個策略,Controller對于View是可替換的, View和Controller的關(guān)系是一對多,在實際的開發(fā)場景中,也經(jīng)常會碰到一個View被多個Controller引用,這即使策咯模式的一種體現(xiàn),只是不那么直觀而已。
總結(jié)一下,關(guān)于MVC各層之間關(guān)系所對應(yīng)的設(shè)計模式
View層,單獨實現(xiàn)了組合模式
Model層和View層,實現(xiàn)了觀察者模式
View層和Controller層,實現(xiàn)了策咯模式
MVC就是將這三個設(shè)計模式在一起用了,將這三個設(shè)計模式弄明白,MVC將毫無神秘感可言。如果不了解這三個設(shè)計模式去學(xué)習(xí)MVC,那不管怎么學(xué)總歸是一知半解,用的時候也難免不會出想問題。
三、參考文章
深入理解MVC https://blog.csdn.net/zuiyingong6567/article/details/80150834
MVC簡介 https://www.cnblogs.com/diyunfei/p/6752618.html
【Unity】MVC框架 https://blog.csdn.net/qq_39574690/article/details/80757261
Unity中MVC簡單應(yīng)用 https://www.jianshu.com/p/acc689be52f9
【Unity3D】手游開發(fā)實踐《騰訊桌球》客戶端開發(fā)經(jīng)驗總結(jié) https://blog.csdn.net/q764424567/article/details/81020381
MVC框架 https://baike.baidu.com/item/MVC框架/9241230?fr=aladdin&fromid=85990&fromtitle=MVC
四、Unity中使用MVC
本篇文章主要是講一下我是如何在Unity中使用MVC模式,MVC模式肯定不能照搬進(jìn)Unity中,所以很多東西都做了修改,以適合我的項目使用,如果有不對的地方,希望大家能指正出來。
使用原理
代碼文檔結(jié)構(gòu)就是這樣的
目前我了解的MVC應(yīng)用到Unity中只有兩種模式,一種就是先按照業(yè)務(wù)功能劃分,再按照MVC劃分
蛋糕心語游戲就是這種模式,使得模塊更聚焦(高內(nèi)聚)
第二種就是先按照MVC劃分,然后再分出來業(yè)務(wù)功能
第二種方式用多了發(fā)現(xiàn)隨著項目的運營模塊增多,沒有第一種那么好維護(hù)。
MVC的關(guān)鍵就在于業(yè)務(wù)劃分,代碼分離,其實跟三層架構(gòu)比較相似,把業(yè)務(wù)層、邏輯層、數(shù)據(jù)層分開來,互相通過一個接口進(jìn)行調(diào)用,但是并不知道接口是怎么實現(xiàn)的。
所以現(xiàn)在的問題就在于如何去劃分呢。
實現(xiàn):
Model(模型層):
在這一層主要就是存放用戶的數(shù)據(jù),UI的數(shù)據(jù),靜態(tài)字段,數(shù)據(jù)存儲,以及模型貼圖資源的存儲
比如說:
存放靜態(tài)字段
存放數(shù)據(jù)
存放模型材質(zhì)字段
數(shù)據(jù)庫增刪改查操作
View(視圖層)
在這一層主要是放一些UI參數(shù),獲取UI數(shù)據(jù),獲取按鈕事件等
點擊事件
Controller(控制層)
這一層就是去實現(xiàn)業(yè)務(wù)邏輯功能,獲取Model的數(shù)據(jù),通知View層更新數(shù)據(jù),承上啟下的功能
五、實例
就帶大家實現(xiàn)在Untiy中使用MVC模式,實現(xiàn)更換圖片的功能
步驟一:設(shè)計界面
步驟二:MVC搭建
Model_Main.cs
View_Main.cs
Controller_Main.cs
關(guān)于那個鼠標(biāo)點擊事件那個方法,在我另一篇文章中有講到,不懂的可以去那篇帖子仔細(xì)看一下。
https://blog.csdn.net/q764424567/article/details/82424308
效果:
源代碼已經(jīng)上傳到CSDN,按需下載
https://download.csdn.net/download/q764424567/10768387
六、總結(jié)
PS:程序員最重要的就是總結(jié),不然學(xué)的再多到關(guān)鍵時刻用不上還是白搭,總結(jié)梳理,然后寫下來,當(dāng)快忘了的時候可以回來看看,會有不一樣的體悟哦。
在Unity中應(yīng)用MVC模式已經(jīng)講解完了,MVC模式其實就是多種設(shè)計模式的結(jié)合體,也是三層架構(gòu)的改良產(chǎn)品,基本原理就是把業(yè)務(wù)邏輯、功能實現(xiàn)、數(shù)據(jù)給分開來,利于增加功能,和維護(hù)。
俗話說的好,一千個人就有一千個哈姆雷特,每個人研究MVC之后,運用到Unity中的方法都不盡相同,方法也是很多樣,我主要就是提供一個想法和思路,更多優(yōu)化運用還要大家多開動腦筋咯。
最后,再回顧一下
Model(數(shù)據(jù)層):存放靜態(tài)字段、數(shù)據(jù)存儲、模型資源存儲
View(視圖層):就是用戶可以看到的層,指的是可以看到的UI,模型,加載和調(diào)用事件
Controller(管理層):實現(xiàn)業(yè)務(wù)邏輯功能、加載模型資源、功能實現(xiàn)等
MVC unity
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。