最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

道法自然《三》:框架設(shè)計(jì)要提供機(jī)制

2020-08-11 16:49 作者:博毅創(chuàng)為  | 我要投稿

前言

**什么叫提供機(jī)制 **

《Unix編程藝術(shù)》里有一句框架設(shè)計(jì)的名言“提供機(jī)制,而不提供策略”。

要弄清楚這句話,首先要了解什么是機(jī)制,什么是策略?接下來我拿游戲開發(fā)來說明。


游戲客戶端引擎unity、cocos、Laya、ue4等提供了機(jī)制。如:組織游戲邏輯,提供場(chǎng)景 +節(jié)點(diǎn) +組件模式。基于這樣的機(jī)制來開發(fā)業(yè)務(wù)邏輯。至于怎么開發(fā),如何組織項(xiàng)目,這屬于開發(fā)人員的事情。

事件訂閱與發(fā)布。提供事件訂閱機(jī)制,要接入哪個(gè)事件,你就監(jiān)聽。

渲染效果定制。提供Shader開發(fā)機(jī)制,材質(zhì)作為配置文件與數(shù)據(jù)傳送,Shader作為算法,開發(fā)人員只要自己開發(fā)Shader,結(jié)合材質(zhì)的機(jī)制,就能實(shí)現(xiàn)游戲渲染效果定制。

資源管理。提供普通的資源管理加載與卸載的機(jī)制,不做過多的功能。AssetsBundle 提供資源更新的機(jī)制,不做過多的功能。這就回答了很多程序員心中的疑問:為什么不做一個(gè)MMORPG里面的四叉樹的場(chǎng)景管理,為什么不做一個(gè)服務(wù)器通訊的完成模塊啊,為什么不完整的做好熱更新?因?yàn)檫@些大多屬于策略類的東西,和具體項(xiàng)目有關(guān)系。所以一般框架設(shè)計(jì),與具體的項(xiàng)目需求有關(guān)的,都不提供實(shí)現(xiàn),或推到上一層。

所以我們基于游戲引擎做的框架,大部分是基于策略做的一些完成公司特定項(xiàng)目的功能和框架,和游戲引擎的設(shè)計(jì)不屬于同一維度,比如UI框架,背包系統(tǒng)等,均屬于策略類的范圍。


如何判斷是框架還是策略?

明白了什么是機(jī)制,設(shè)計(jì)者如何判斷屬于機(jī)制還是策略,這個(gè)就變得很重要。

一般怎么判斷呢?大部分的設(shè)計(jì)師會(huì)有”感覺”。

這個(gè)感覺,來自于平常的學(xué)習(xí)與積累,閱讀別人的框架,組織管理項(xiàng)目開發(fā)經(jīng)驗(yàn)。

那么平常如何練習(xí)這樣一種”感覺”呢?當(dāng)你設(shè)計(jì)決策有困惑的時(shí)候,你可以按照下面的方法試試。


我做這個(gè)框架的愿景是什么?

馬云說做企業(yè)要有愿景,如果你沒有愿景就會(huì)迷茫,寫程序做框架設(shè)計(jì)亦是如此。

SpringClound 就是提供微服務(wù)的框架;Skynet就是提供Actor模式的服務(wù)調(diào)度框架,;Netty基于NIO的高性能的網(wǎng)絡(luò)框架;protobuf 跨平臺(tái)跨語(yǔ)言的序列化與反序列化工具庫(kù)。

在github上,你去看,好的框架在設(shè)計(jì)的時(shí)候就有它的愿景。

xLua的愿景:

XLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc。

做游戲引擎是為開發(fā)各種類型的游戲提供基礎(chǔ)服務(wù)。做一個(gè)Moba類的游戲框架,基于游戲引擎,結(jié)合項(xiàng)目需求,制定一個(gè)快速開發(fā)Moba類游戲的框架與技術(shù)工具。明確了這個(gè)立場(chǎng)以后,凡是符合這個(gè)立場(chǎng)的,你就可以加入,不符合的你就不做。做設(shè)計(jì)的時(shí)候,想好愿景,很多問題就豁然開朗了。


做框架設(shè)計(jì),要經(jīng)常思考如何做減法

明白了框架愿景以后,判斷要怎么設(shè)計(jì),要不要做?

我們可以嘗試做減法,而不是一味的做加法!

這個(gè)功能我推給使用我的上層做可不可以?上層做這個(gè)功能用我提供的機(jī)制,是否能簡(jiǎn)單做到?如果能,那就到此為止,讓上層處理。

話說多了容易錯(cuò),框架功能做多了容易被人說不靈活。所以做減法是必要的。


Lua編程語(yǔ)言就很懂得做減法:它不提供任何其他的API,它完成的功能就是嵌入式的輕量級(jí)腳本,所以游戲框架經(jīng)常用Lua做腳本。

做產(chǎn)品的三層結(jié)構(gòu)

經(jīng)過一些總結(jié)分析,我們發(fā)現(xiàn)做一個(gè)游戲出來大致分為三層。從下往上:

客戶端

第1層基礎(chǔ)框架層:提供基礎(chǔ)功能服務(wù),比如客戶端游戲引擎,protobuf、Socket等基礎(chǔ)庫(kù)。

第2層產(chǎn)品框架層:提供完成游戲研發(fā)、發(fā)布、調(diào)試等基礎(chǔ)服務(wù)性框架,比如MMORPG游戲框架、地圖編輯與尋路導(dǎo)航、AOI、 粒子特效、UI框架、版本管理與資源熱更新等。

第3層業(yè)務(wù)邏輯代碼:完成特定項(xiàng)目業(yè)務(wù)邏輯的實(shí)現(xiàn)。

在開發(fā)代碼的時(shí)候,要清楚地知道自己是哪一層。

服務(wù)端

第1層基礎(chǔ)框架:提供基礎(chǔ)功能服務(wù)并組合起來,網(wǎng)絡(luò),協(xié)議,數(shù)據(jù)庫(kù),業(yè)務(wù)邏輯開發(fā)機(jī)制。

第2層產(chǎn)品框架:棋牌,MMO, Moba, 基于基礎(chǔ)框架,搭建分布式服務(wù)器集群,維護(hù)工具,更新停服檢修等。

第3層服務(wù)器業(yè)務(wù)邏輯的實(shí)現(xiàn)。

現(xiàn)在行業(yè)都很發(fā)達(dá),第1層基本上都有成熟開源的框架為我們做好了。第2層是目前我們架構(gòu)師主流的架構(gòu)任務(wù)。第3層可以放一些基礎(chǔ)的程序崗位來實(shí)現(xiàn)。

清楚了這些結(jié)構(gòu)以后,你會(huì)發(fā)現(xiàn)提升自己的路徑也就出來了


做業(yè)務(wù)邏輯的同時(shí),搜集開發(fā)特定產(chǎn)品的需求,思考如何做特定產(chǎn)品框架能滿足這些需求,特定產(chǎn)品框架的基礎(chǔ)支持,可以熟悉常用開源的第三方方案。

熟悉常用的第三方特定功能的庫(kù),就能把產(chǎn)品變成需求,把需求變成架構(gòu),使用基礎(chǔ)服務(wù)來支撐架構(gòu)。

END
今天的《設(shè)計(jì)之道》就分享到這里,如果你覺得本篇文章不錯(cuò),歡迎轉(zhuǎn)發(fā),吸引更多的同行,在留言區(qū)一起討論,在討論中越辯越明。謝謝大家!


道法自然《三》:框架設(shè)計(jì)要提供機(jī)制的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
云安县| 靖西县| 靖宇县| 柯坪县| 乌兰县| 宜良县| 上林县| 禄丰县| 高青县| 达拉特旗| 靖远县| 南华县| 古蔺县| 伊川县| 永顺县| 徐闻县| 贺州市| 三穗县| 万年县| 新巴尔虎右旗| 西城区| 古蔺县| 山丹县| 花莲市| 和平县| 固安县| 海安县| 霍山县| 威海市| 波密县| 浙江省| 八宿县| 孝昌县| 邹城市| 英山县| 广安市| 万年县| 奉贤区| 怀宁县| 阿鲁科尔沁旗| 合水县|