ruby-on-rails - 遵循 DCI 设计时在哪里进行验证?

标签 ruby-on-rails ruby validation activerecord dci

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

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

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

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

最佳答案

这取决于相关的验证/规则。 DCI 的一个主要目标是在规则与领域模型相关联的情况下将系统是什么(领域模型)与系统做什么(功能)分开。例如。 SSN 的福利规则那么它应该是数据对象的一部分。另一方面,如果规则与系统的功能相关,例如一个用户每周只能订购两件 super 折扣的产品,那就看上下文了

关于ruby-on-rails - 遵循 DCI 设计时在哪里进行验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12875921/

相关文章:

php - Laravel 验证 - 数组字段,仅允许两个字段之一,但都不是必需的

sql - 如何使属性 setter 通过SQL函数发送值

ruby-on-rails - 在 Rails 中,如何制作 :mobile views to fallback default views when not found?

ruby-on-rails - Controller 类中的 session 和 params 之间的区别

ruby-on-rails - Ruby 1.9.3 -> 2.0 别名方法和扩展

ruby - 哈希迭代不返回子目录内容

python - Cherrypy 表单验证

validation - Asp.Net MVC : Execution of the child request failed. 请检查 InnerException 以获取更多信息

ruby-on-rails - Rails API 版本控制的通配符匹配导致无限重定向

ruby-on-rails - Rails 设计自定义注册和登录在同一页面问题