域驱动设计中输入验证通用规则的位置是什么?
What is the place for input validation general rules in Domain Driven Design?
我正在开发一个遵循领域驱动设计技术的系统,我的目标是捕捉员工的上下班时间。一个要求是系统不能允许同一员工在给定时间跨度内有两个连续的时钟。我的问题是这条规则在哪里更合适,我不认为它与一个实体有关,而是作为域实体之上的某种过程的规则。忠告?
您可以拥有处理此问题的域服务。您可以让您的应用程序层获取当天的所有签到并将其提供给域服务。或者,如果 IRepository 位于您的域层中,则域服务可以请求签入。
假设这个 'rule' 是您域中的实际不变量,您可能应该在域模型中维护时钟进出信息?毕竟这听起来像是您要捕获的行为。
附带说明一下,注意不要让数据库影响域模型的设计。仔细考虑您是否正在应用 CRUD(创建、读取、更新和删除)方法或尝试对实际域建模是很有帮助的。如果以后您需要花时间去发现各种有界上下文,这将帮助您更有效地对域进行建模。
我有一个 post 你可能会觉得有用,它有一些松散的术语定义可以提供帮助,Aggregate Root – How to Build One for CQRS and Event Sourcing。
问题中的单词 "General rule" 表示未指定要求。
回答一个问题:什么意思"system cannot permit" - 是否应该记录案例?拒绝保存数据?向员工的经理发送报告?
领域模型在很大程度上取决于您建模领域的哪些方面。
有了答案,你会得到一个更清晰的模型,问题也不会太主观了。
根据要求,可能是:
employee
的行为;
door
的行为;
CorporateSecurity
服务行为;
- DSL 中的事件处理程序;
- 规则引擎中的规则;
- 完全不同的东西。
编辑:如果是允许输入什么数据的问题,那就是输入验证。描述了一种很好的方法 in Martin Fowler's bliki - 其中对象可以 validate()
自身和 return 验证错误的集合。
我正在开发一个遵循领域驱动设计技术的系统,我的目标是捕捉员工的上下班时间。一个要求是系统不能允许同一员工在给定时间跨度内有两个连续的时钟。我的问题是这条规则在哪里更合适,我不认为它与一个实体有关,而是作为域实体之上的某种过程的规则。忠告?
您可以拥有处理此问题的域服务。您可以让您的应用程序层获取当天的所有签到并将其提供给域服务。或者,如果 IRepository 位于您的域层中,则域服务可以请求签入。
假设这个 'rule' 是您域中的实际不变量,您可能应该在域模型中维护时钟进出信息?毕竟这听起来像是您要捕获的行为。
附带说明一下,注意不要让数据库影响域模型的设计。仔细考虑您是否正在应用 CRUD(创建、读取、更新和删除)方法或尝试对实际域建模是很有帮助的。如果以后您需要花时间去发现各种有界上下文,这将帮助您更有效地对域进行建模。
我有一个 post 你可能会觉得有用,它有一些松散的术语定义可以提供帮助,Aggregate Root – How to Build One for CQRS and Event Sourcing。
问题中的单词 "General rule" 表示未指定要求。
回答一个问题:什么意思"system cannot permit" - 是否应该记录案例?拒绝保存数据?向员工的经理发送报告?
领域模型在很大程度上取决于您建模领域的哪些方面。
有了答案,你会得到一个更清晰的模型,问题也不会太主观了。
根据要求,可能是:
employee
的行为;door
的行为;CorporateSecurity
服务行为;- DSL 中的事件处理程序;
- 规则引擎中的规则;
- 完全不同的东西。
编辑:如果是允许输入什么数据的问题,那就是输入验证。描述了一种很好的方法 in Martin Fowler's bliki - 其中对象可以 validate()
自身和 return 验证错误的集合。