Bog*_*byk 8 domain-driven-design constants
例如,我有一个Media实体,它有MediaType值对象,负责保存/创建媒体类型。存储可能的媒体类型常量列表的最佳位置是什么?首先,我认为它存储在内部,MediaType因为它负责创建类型。但是,如果我在应用程序层或接口层中需要它来验证请求,甚至在查询中该怎么办?
看起来如果我想隔离域,我不能在 中存储常量,因为MediaType我不能在域之外使用它。或者仅在域层中使用常量,并在其他地方对其进行硬编码,这对我来说似乎是不正确的,因为在这种情况下,我们没有一个地方可以更改它。第三个选项是创建单独的常量类,例如并将其存储在域之外(不确定在哪里),但在这种情况下看起来我们根本MediaConstants不需要VO。MediaType
在 DDD 中处理常量的最佳实践是什么?
当然,隔离您的域就是您所追求的。这意味着您的域包含所有相关的不变量,并且正如您所做的那样,还包含使域模型具有表现力所需的枚举等。
有时,“外部”世界需要重复一些工作,以使事情变得更容易、更方便。例如,您的域检查电子邮件地址的格式是否正确这一事实并不意味着您的 Web 前端也不会执行该验证。您可以在前端放弃此类电子邮件验证,但这最终会给用户带来相当糟糕的体验。为了方便起见,我们在前端“复制”验证。
某些数据也是如此。平面分类结构的通用方法可能类似于ReferenceType1-* ReferenceItem,其中ReferenceType.Name和MediaType是ReferenceItem.Name您需要的任何值。有时你可以有一个Code和IsSystemType作为你的参考项目,但这是一般的想法。每种引用类型都将具有一个或多个引用项,因此是一种相当简单的一对多关系,可以轻松地持久保存到某些数据存储中。然后,您可以通过查询机制将这些值公开给前端,并且在您的集成层/关注点(Web 控制器/消息处理程序)中,您可以获取相关的项目名称(或代码)并将其映射到您的枚举。