我是新手,所以请耐心等待。我最近在几个项目中使用了一个 MVC 框架,过了一段时间,我对 MVC 中“模型”的感知有用性感到失望。
我得到了 Controller 和 View 的用处,我知道表示和逻辑之间的分离对于使代码在 future 更易于维护很重要,尽管不一定更快或更健壮。
如果所有逻辑首先都应该放在 Controller 中,我认为模型没有任何用处,尤其是 Active-Record。我们已经有了一种强大且易于使用的语言来与数据库进行通信,对吗?它被称为 SQL。对我来说,当模型像事件记录一样实现时,它的用处取决于您是否希望您的应用程序适合多个数据库。
所以我要问的是,如果你只使用一个数据库,为什么还要使用 Models 和 Active-Records?为什么不只使用 SQL?为什么要增加额外的复杂性?你们有任何案例研究/现实生活中的故事,模型实际上可以比仅使用数据库类和 SQL-away 做得更好吗?
再次,如果我看起来如此无知,我很抱歉,但我真的不知道为什么模型很重要。谢谢回答。
最佳答案
在大多数现实生活中,来自用户的数据不会直接进入数据库。
它必须经常被验证、过滤或转换。
模型层的作用通常是通过执行这些操作确保数据正确到达后端存储(通常是数据库),这不应该是 Controller (瘦 Controller ,胖模型)的责任,而不是责任数据库引擎本身。
换句话说,模型层负责 - 或“知道” - 如何处理数据。
大多数现代 MVC 框架都提供了在数据有效性要求上指定契约(Contract)的方法,例如 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
这里,有几个数据有效性要求不能由数据库处理,也不应该在 Controller 中处理,因为对这些要求的任何修改都可能在几个地方破坏代码。
因此,模型是确保数据与您的领域一致的最佳场所。
关于它还有很多话要说,但我想解决一个对我来说似乎很重要的问题,受实践经验的启发:)
关于model-view-controller - MVC中Model的用途是什么?它真的有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5093880/