8

我正在关注 DCI 来构建新 Rails 应用程序的行为,但我对在哪里放置验证有一些疑问。

传统上,如果您要使用 ActiveRecord 模型管理数据,则在继承自 AR 的特定类中定义验证,并且它们似乎适合作为数据层的一部分。

但是,在我看来,只有在特定角色下才会发生某些验证是有意义的,并且只有当对象在该上下文中时才应该检查它们,而在所有其他情况下都被忽略。这基本上意味着这些验证应该在特定角色中定义,并且当对象在有意义的上下文中使用时,应该使用这些角色模块进行扩展。

你认为在角色中保留这些验证是个好主意吗?如果是这样,你如何声明它们而不污染同一类的其他实例而不是对象?如果我想使用 ActiveRecord 验证,它们是在类级别声明的,所以我不能将它们单独附加到对象,被迫在角色模块上使用“验证”实例方法的重新声明(附加错误直接到对象的错误数组),或一些类似的技术。

4

1 回答 1

5

这取决于相关的验证/规则。如果规则与域模型相关联,DCI 的主要目标是将系统是什么(域模型)与系统做什么(功能)分离。例如,SSN 的良好性规则,那么它应该是数据对象的一部分。另一方面,如果规则与系统的功能有关,例如,用户每周只允许订购两个超级折扣产品,那么这是一个上下文问题

于 2012-10-23T10:47:47.530 回答