在大多数现实生活中,来自用户的数据不会直接进入数据库。
它必须经常被验证、过滤或转换。
模型层的作用通常是通过执行这些操作确保数据正确到达后端存储(通常是数据库),这不应该是控制器(瘦控制器,胖模型)的责任,而不是责任数据库引擎本身。
换句话说,模型层负责——或“知道”——应该如何处理数据。
大多数现代 MVC 框架都提供了在数据有效性要求上指定合同的方法,例如 Rails。
这是来自http://biodegradablegeek.com/2008/02/introduction-to-validations-validation-error-handling-in-rails/的示例:
class Cat
validates_inclusion_of :sex, :in => %w(M F), :message => 'must be M or F'
validates_inclusion_of :vaccinated, :in => [true,false]
validates_inclusion_of :fiv, :in => [true,false]
validates_inclusion_of :age, :within => 1..30
validates_each :weight do |record, attr, value|
record.errors.add attr, 'should be a minimum of 1 pound' if value and value /^[01][0-9]\/[0-9]{2}\/[0-9]{4}$/
validates_length_of :comment, :allow_blank => true, :allow_nil => true, :maximum => 500
end
这里,一些数据有效性要求不能由数据库处理,也不应该在控制器中处理,因为对这些要求的任何修改都可能在几个地方破坏代码。
因此,模型是确保数据与您的领域一致的最佳场所。
关于它还有很多话要说,但我想解决一个对我来说似乎很重要的问题,受实践经验的启发:)