范例
在撰写此答案之时,此处发布的其他答案都是错误的。
而不是问域驱动设计是否适合游戏。您应该询问“域建模”是否适合游戏。
域建模是否适合游戏?
答案是:有时候绝对很棒。但是,如果您要创建实时游戏,例如平台游戏或FPS或其他(很多游戏),则不会。它不一定非常适合那些系统。但是,可能存在那些在其中实施域模型模式有效的游戏的系统。
正如其他人在这里提到的那样,由于充分的理由,组件实体框架往往非常受欢迎。但是,在游戏开发文化中,似乎显然缺乏分层架构。同样,这是有充分的理由的,因为大多数人要开发的游戏只是改变实体上的状态,而让紧急后果成为游戏。
所有软件都不是您要编写的软件。有些与其他完全不同。
领域建模效果良好的领域示例包括纸牌游戏,棋盘游戏和其他类型的事件驱动系统。
以时间增量作为核心领域概念确定的以X帧速率运行且具有移动等特性的游戏可能不太适合。在这种情况下,我们的“域”通常是如此简单,以至于不需要域建模。碰撞检测,新实体的产生,力对现有实体的影响等往往涵盖了大多数游戏玩法。
但是,随着事情变得复杂,您确实开始看到开发人员在其实体中实现域模型以处理某些类型的行为和计算。
游戏架构中的领域模型模式
您的游戏引擎(例如Unity3D)通常是面向组件实体的。在平台游戏中,您可能会为角色创建一个实体,并且其状态会不断发生变化以更新位置等。
但是,在事件驱动型游戏中,组件实体框架的角色更有可能只是作为用户界面而存在。您最终得到了分层的体系结构。
UI将游戏状态呈现给用户。用户与UI交互,从而触发服务层中的命令。服务层与域对象进行交互。域对象引发域事件。事件侦听器听到事件并触发UI中的更改。
UI>服务层>域模型
简而言之,最后是带有服务层实现的model-view-controller。
使用此体系结构,您将获得具有事件驱动界面的完全可单元测试的游戏核心(这在游戏开发文化中是罕见的,并且可以显示出来)。
好吧,什么是DDD?
领域驱动设计专门是一种文化/运动,它着重于用于了解领域的分析模式,以便您实际上是在构建正确的事物,然后通过实现模式来使您能够实现代表模型的模型层。使用您语言的习语在领域模型中定义概念。DDD来自一个使用复杂域的社区,并且一直通过关注域建模来寻求方法来管理其应用程序中的高复杂性。
如果您的目标只是开始编码,使用系统然后弄清楚以后要构建什么,等等,那么DDD的效果就不好。它假设存在或多或少的域。因此,如果您不知道自己的游戏将会是什么。那么,它将无法正常工作。