电子邮件唯一性检查属于业务逻辑,是应该放到领域模型User类中?还是UserController中?这里有领域模型完整性和纯度的抉择:
- 领域域模型完整性是指您的域模型包含所有应用程序的域逻辑。按照这个依据,电子邮件唯一性检查属于领域逻辑,领域模型应该包含所有的领域逻辑,放入User中。
- 域模型的纯洁是指您的域模型不涉及流程外的依赖项。按照这个依据,因为电子邮件的唯一性检查依赖其他选项,应该放入非领域模型的控制器UserController中。
三取二
在大多数使用情况下,不能同时具有以下所有3个属性:
- 领域模型的完整性
- 域模型纯度
- 性能
共有三种常用方法,但是每种方法仅能为您提供3种属性中的2种:
- 将所有外部读取和写入推向业务操作的边缘-保留域模型的完整性和纯净性,但降低性能。
- 将业务流程外依赖项注入域模型中:保持性能和域模型的完整性,但要以牺牲领域模型的纯度为代价。
- 在域层和控制器之间分配决策过程:有助于提高性能和域模型的纯度,但是会降低完整性
否则,选择领域模型纯度而非完整性。