【发布时间】:2013-08-21 14:55:08
【问题描述】:
我正在使用 DDD 进行一个项目,我有一些课程,但我不知道将它们放在哪里。
域名是关于现有游戏的。该游戏具有基本概念,例如角色,技能树。我的领域类只是代表这些概念。这个游戏不是我做的。
我的应用程序/项目是关于拥有一个代表这些概念的软件,并具有一些附加值。目前,名称和描述是唯一可能的附加值(例如,“火法师”和“法力依赖,小心!”)。
问题 1:有两个类是否有意义,还是应该合并它们?在前一种情况下,我应该将此类“具有附加值(名称和描述)”放在哪里?在应用层?
问题2:我说的对吗,领域层代表了我正在研究的知识领域,而应用层代表了领域中不存在的所有事物,但我想要提供,作为附加值?
(所以如果我的软件只是代表领域,应用层就薄了,如果我的软件提供了很多非领域的功能,那么应用层就厚了?)
附加信息 1: 我的项目是关于创建一个角色模拟器。因此,为了模拟一个角色,我必须表示它,以及它的所有依赖项。我的领域层职责是代表游戏。它包含像 Character 这样的类,具有一些属性(Life、Mana、Attack、Defense、Class)和一些枚举(如 CharacterClass,它列出了所有可用的类)。
现在,我希望我自己的项目能够为用户提供创建代表游戏角色的项目的能力。该项目还允许用户保存其他信息,例如当前项目的名称、主要(和次要)设备集、主要(和次要)技能树。任何设备集和技能树都可以使用注释,因此用户可以简单地拥有一个内置的备忘录/便利贴。次要装备集和技能树,注释不是游戏中现有的概念(因此,在我的领域中不存在)。
问题1中,“增值类”是一个角色项目,是多个信息(角色装备、技能树、注释等)的集合。如果用户需要,它可以保存在物理支架上,稍后再次打开和编辑。
问题 1 的重新表述: 我有一个 Character 类和一个 CharacterProject 类。 CharacterProject 类是多个信息的组合。但它特定于我的应用程序。放在应用层、领域层或其他地方有意义吗?
【问题讨论】:
-
为了让我们回答问题1,您应该更具体地了解域概念及其作用:存在哪些类型的字符?存在哪些类型的技能?角色能做什么?技能如何影响角色?领域模型是业务逻辑的运行描述(在这种情况下是游戏规则):它应该是领域(游戏)专家可读的!因此,问题 2 的答案是否定的。
-
@Giacomo 补充资料1已写,第一个问题已改写。
-
我认为 CharacterProject 肯定不是游戏中的域对象,但它是您应用程序中的域对象。
标签: oop architecture domain-driven-design onion-architecture