在遵循DCI设计时,何处进行验证?

时间:2012-10-13 18:48:17

标签: ruby-on-rails ruby validation activerecord dci

我正在关注DCI以构建新Rails应用程序的行为,但我对将验证放在何处有疑问。

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

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

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

1 个答案:

答案 0 :(得分:4)

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