在适当的MVC中,一切都必须是模型,视图或控制器吗?

时间:2013-05-19 12:09:40

标签: design-patterns model-view-controller asp.net-mvc-4 yii

我一直想知道的东西,但直到现在才有点尴尬:在“正确的”MVC(严格遵守模式)中,一切都必须是模型,视图或控制器吗?如果没有,你能举例说明何时打破这种模式是可取的还是必要的?最后,类(或静态)方法在MVC中的作用是什么?

具体示例:我有模型OneModelTwoModel。没有理由认为它们是从一些超类继承而来的。两者都具有完全不同的属性,但它们共享一个emailAddress字段,有时我想为每个模型validateEmailAddress()。我不想在每个模型中复制验证代码,因此我使用类方法ValidationHelper创建一个validateEmailAddress(String emailAddress)类,我现在将在OneModelTwoModel中调用每个类{{1}}

我现在打破了模式吗?我该如何解决?

3 个答案:

答案 0 :(得分:3)

如果您将模型,视图和控制器视为应用程序的层而不仅仅是表示层的组件,那么您的电子邮件验证类将成为模型层的一部分,因为它包含业务逻辑。我没有看到你打破模式的地方,并不是每个模型类都必须是数据对象。

“严格遵守模式”的问题在于模式随着时间的推移而发展。原始模式适用于单用户应用程序的GUI。后来它适用于网络,但有不同的解释,特别是关于模型和控制器之间以及客户端和服务器之间的责任。因此,准备在没有一个“真实”的情况下得到不同的答案。

答案 1 :(得分:1)

MVC设计模式由两个主要部分组成:

  • 表示层
  • 模型层

表示层为用户提供了一种与模型层交互的方式,而模型层包含所有业务逻辑和相关任务。

模型不是类或对象。相反,它包含几组结构,每个结构都有域业务逻辑的不同方面作为其职责。您可以阅读更长的解释here

表示层主要根据它与模型层的交互方式进行划分。你可以说控制器“写”到模型层(通过服务)并从中“读取”视图。

整个MVC设计模式(以及其他MVC启发模式)中最简单的部分应该是控制器。它们接受用户输入并基于该模型层的状态。它们也可以改变视图,但是,当MVC应用于Web时,它更像是一个例外而不是规则。

至于观点 - 我仍在试图解决这些问题。我目前得到的内容可以阅读here

  

注意:在应用于网络时,严重缺乏有关视图实施的材料。由于平台完全不同,与桌面应用程序相比,不可能直接移植相同的指南。我还没有找到任何与该主题无关的框架材料,专注于为Web创建视图。

答案 2 :(得分:1)

您必须了解MVC是架构模式。因此,它是一种更高级别的模式,描述了组件的组织方式和相互之间的交互方式。要实现这种组织,您将需要一组专门的组件来为您做“肮脏的工作”。在这个集合中,你可能会有一些组件不适合任何字母M-V-C的定义,一些组件只是帮助功能,另一些组件在层之间的接口上,处理它们的集成。

所以,答案是没有,而不是everthing是模型,视图或控制器。