我正在开发一个遵循领域驱动设计技术的系统,我的目标是捕获员工的时钟和时钟。一个要求是系统在给定的时间跨度内不允许同一雇员连续两个时钟。我的问题是这个规则在哪里更合适,我不认为它与一个实体有关,而是作为域实体之上的某种过程的规则。建议?
答案 0 :(得分:2)
问题中的“一般规则”一词表示要求不足。
回答一个问题:“系统不能允许”是什么意思 - 它应该记录案例吗?拒绝保存数据?将报告发送给员工的经理?
域模型高度依赖于您建模的域的哪些方面。
通过答案,你将得到一个更清晰的模型,问题将不再过于主观。
根据要求,可能是:
employee
的行为; door
的行为; CorporateSecurity
服务行为; 编辑:如果允许输入哪些数据,那么它就是输入验证。有一个很好的方法描述in Martin Fowler's bliki - 一个对象可以validate()
本身并返回一组验证错误。
答案 1 :(得分:1)
您可以拥有一个处理此问题的域名服务。您可以让应用程序层获取当天的所有时钟,并将其提供给域服务。或者,如果IRepository存在于您的域层中,则域服务可以请求时钟输入。
答案 2 :(得分:1)
假设此“规则”是您域中的实际不变量,您可能应该在域模型中维护时钟输入和输出信息?毕竟它听起来像你想要捕捉的行为。
作为旁注,请注意不要让数据库影响域模型的设计。考虑是否应用CRUD(创建,读取,更新和删除)方法或尝试对实际域建模是有帮助的。如果后者需要花时间发现各种有界的上下文,这将有助于您更有效地建模域。
我有一篇你可能会发现有用的帖子,它对可能有用的术语有一些宽松的定义,Aggregate Root – How to Build One for CQRS and Event Sourcing。