model-view-controller - MVC中Model的用途是什么?它真的有用吗?

标签 model-view-controller architecture paradigms

我是新手,所以请耐心等待。我最近在几个项目中使用了一个 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/

相关文章:

process - 是否有一种面向描述代理之间交互的编程语言?

perl - 学习编程范式的能力会受到文化或母语语法的影响吗?

model-view-controller - 胖模型和瘦 Controller 听起来就像创造上帝模型

javascript - 如何在 Node js中将路由与 Controller 链接起来?

ios - 我在哪里保存对 GMSMarkers 列表的引用

javascript - AngularJS 中的嵌套模块

aop - 什么是面向方面编程?

c# - 如何使用 C# 在 MVC 布局 View 中编辑 CSS 类

java - 在 Java 中对方法体施加约束或限制

c - 实现缓存建模框架