你在說什么?
創(chuàng)世記第11章1-9句記錄了“巴別城”的故事。當(dāng)時地上的人們都說同一種語言,當(dāng)人們離開東方之后,他們來到了示拿之地。在那里,人們想方設(shè)法燒磚好讓他們能夠造出一座城和一座高聳入云的塔來傳播自己的名聲,以免他們分散到世界各地。上帝來到人間后看到了這座城和這座塔,說一群只說一種語言的人以后便沒有他們做不成的事了;于是上帝將他們的語言打亂,這樣他們就不能聽懂對方說什么了,還把他們分散到了世界各地,這座城市也停止了修建。這座城市就被稱為“巴別城”。wiki-巴別塔
這個故事告訴我們,如果想要達(dá)成共識,使用同一種語言是不可或缺的因素,在開發(fā)的過程中也是如此,想要高效且快速的領(lǐng)會中心思想、與他人達(dá)成共識,就需要一種統(tǒng)一的語言:通用語言。
游戲開發(fā)中需要通用語言嗎?
在實(shí)際開發(fā)中也會遇到因使用不同語言造成歧義的情況。
- 背包中Item的概念分別理解為:每個格子為一個Item、一個物品為一個Item
- Server概念的理解為:一個服務(wù)、服務(wù)器相關(guān)
- Component的理解為:Dots類型的組件、Mono的組件
- 中尺寸貼圖其中的尺寸理解為:512、256
- 一輪結(jié)束理解為:以指定數(shù)量為一輪、以時間周期為一輪。(一種消耗體力值、隨著時間逐漸恢復(fù)的機(jī)制)
生活中也是這樣,同一個詞匯在不同背景下的人、不同環(huán)境中也賦予了不同的含義,例如:面向?qū)ο?/strong>與面向對象。在一些技術(shù)類書籍中,也會看到通用語言的影子,比如說術(shù)語表。類似以上種種因理解不同造成的歧義,我們在發(fā)現(xiàn)時第一時間就要統(tǒng)一語言,此種語言可能只限于和你對接功能的人,亦或是共同開發(fā)同一模塊的群體中。當(dāng)說出此種語言的某個詞匯時,與它相關(guān)的上限文,使用的特殊情境、注意事項(xiàng)等前提,都以經(jīng)被溝通的人所了解。
只有這樣,我們溝通才是暢通的,才能快速的get到對方的點(diǎn),做出共同決策。
所以針對【游戲開發(fā)中需要通用語言嗎?】這個問題,答案是肯定的:我們需要通用語言。
有人可能會問,有沒有什么辦法能徹底解決這種問題?筆者認(rèn)為幾乎可能,因?yàn)槌霈F(xiàn)理解的偏差,主要是因?yàn)槲幕町悺r代背景、個人經(jīng)歷所不同造成的。如果要統(tǒng)一以上三點(diǎn),就像要消滅戰(zhàn)爭、世界和平一樣。不可能,起碼現(xiàn)在不可能。
領(lǐng)域模型:現(xiàn)實(shí)世界到虛擬世界的思維映射
再說領(lǐng)域模型之前要先解釋一下領(lǐng)域,什么是領(lǐng)域:就是特定的范疇,一個模塊,一個系統(tǒng),一類需求都可以理解為領(lǐng)域。
那領(lǐng)域模型就是為了解決特定范疇內(nèi)的問題,針對不同的讀者,對其梳理出關(guān)鍵元素間的相互關(guān)系,并且以可視化的方式將現(xiàn)實(shí)世界映射到虛擬世界中。
其中:UML、流程圖、視圖模型乃至一些偽代碼,都屬于領(lǐng)域模型。
領(lǐng)域模型在項(xiàng)目中的作用
編程的世界是抽象的、不可見的,起碼不如現(xiàn)實(shí)世界中看得見摸得著。所以為了快速抓住關(guān)鍵事物之間的關(guān)系或走向,我們就需要建模,建立領(lǐng)域模型,以最簡單的方式了解其領(lǐng)域的全貌。
配合前面提到的通用語言,以達(dá)到降低溝通成本、將更多的精力放在解決問題的本身,也避免了被其他因素所干擾,造成方向上的錯誤。
總結(jié)
通用語言和領(lǐng)域模型是在領(lǐng)域驅(qū)動設(shè)計(jì)又或簡稱DDD中所倡導(dǎo)的核心概念,筆者最初接觸DDD是在2020年初,發(fā)現(xiàn)其中的很多設(shè)計(jì)思想和概念都在游戲開發(fā)中都有相應(yīng)的映射,比如領(lǐng)域?qū)<遥河螒蛑械牟邉?。且?yīng)對游戲中頻繁的變動(人或需求)有很大幫助。其最終目的就像DDD那本書封面寫的那樣:領(lǐng)域驅(qū)動設(shè)計(jì):軟件核心復(fù)雜性應(yīng)對之道。