你在说什么?
创世记第11章1-9句记录了“巴别城”的故事。当时地上的人们都说同一种语言,当人们离开东方之后,他们来到了示拿之地。在那里,人们想方设法烧砖好让他们能够造出一座城和一座高耸入云的塔来传播自己的名声,以免他们分散到世界各地。上帝来到人间后看到了这座城和这座塔,说一群只说一种语言的人以后便没有他们做不成的事了;于是上帝将他们的语言打乱,这样他们就不能听懂对方说什么了,还把他们分散到了世界各地,这座城市也停止了修建。这座城市就被称为“巴别城”。wiki-巴别塔
这个故事告诉我们,如果想要达成共识,使用同一种语言是不可或缺的因素,在开发的过程中也是如此,想要高效且快速的领会中心思想、与他人达成共识,就需要一种统一的语言:通用语言。
游戏开发中需要通用语言吗?
在实际开发中也会遇到因使用不同语言造成歧义的情况。
- 背包中Item的概念分别理解为:每个格子为一个Item、一个物品为一个Item
- Server概念的理解为:一个服务、服务器相关
- Component的理解为:Dots类型的组件、Mono的组件
- 中尺寸贴图其中的尺寸理解为:512、256
- 一轮结束理解为:以指定数量为一轮、以时间周期为一轮。(一种消耗体力值、随着时间逐渐恢复的机制)
生活中也是这样,同一个词汇在不同背景下的人、不同环境中也赋予了不同的含义,例如:面向对象与面向对象。在一些技术类书籍中,也会看到通用语言的影子,比如说术语表。类似以上种种因理解不同造成的歧义,我们在发现时第一时间就要统一语言,此种语言可能只限于和你对接功能的人,亦或是共同开发同一模块的群体中。当说出此种语言的某个词汇时,与它相关的上限文,使用的特殊情境、注意事项等前提,都以经被沟通的人所了解。
只有这样,我们沟通才是畅通的,才能快速的get到对方的点,做出共同决策。
所以针对【游戏开发中需要通用语言吗?】这个问题,答案是肯定的:我们需要通用语言。
有人可能会问,有没有什么办法能彻底解决这种问题?笔者认为几乎可能,因为出现理解的偏差,主要是因为文化差异、时代背景、个人经历所不同造成的。如果要统一以上三点,就像要消灭战争、世界和平一样。不可能,起码现在不可能。
领域模型:现实世界到虚拟世界的思维映射
再说领域模型之前要先解释一下领域,什么是领域:就是特定的范畴,一个模块,一个系统,一类需求都可以理解为领域。
那领域模型就是为了解决特定范畴内的问题,针对不同的读者,对其梳理出关键元素间的相互关系,并且以可视化的方式将现实世界映射到虚拟世界中。
其中:UML、流程图、视图模型乃至一些伪代码,都属于领域模型。
领域模型在项目中的作用
编程的世界是抽象的、不可见的,起码不如现实世界中看得见摸得着。所以为了快速抓住关键事物之间的关系或走向,我们就需要建模,建立领域模型,以最简单的方式了解其领域的全貌。
配合前面提到的通用语言,以达到降低沟通成本、将更多的精力放在解决问题的本身,也避免了被其他因素所干扰,造成方向上的错误。
总结
通用语言和领域模型是在领域驱动设计又或简称DDD中所倡导的核心概念,笔者最初接触DDD是在2020年初,发现其中的很多设计思想和概念都在游戏开发中都有相应的映射,比如领域专家:游戏中的策划。且应对游戏中频繁的变动(人或需求)有很大帮助。其最终目的就像DDD那本书封面写的那样:领域驱动设计:软件核心复杂性应对之道。