4

直到现在我一直想知道但有点不好意思问的问题:在“正确的”MVC(严格遵守模式)中,所有东西都必须是模型、视图或控制器吗?如果没有,您能否提供一个示例,说明什么时候打破这种模式是可取的或必要的?最后,类(或静态)方法在 MVC 中的作用是什么?

具体示例:我有模型OneModelTwoModel. 没有自然的理由认为它们是从某个超类继承的。两者都有完全不同的属性,但它们确实共享一个emailAddress字段,有时我想validateEmailAddress()为每个模型。我不想复制每个模型中的验证代码,所以我ValidationHelper用类方法创建了一个类validateEmailAddress(String emailAddress),我现在将在每个OneModeland中调用它TwoModel

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

4

3 回答 3

3

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

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

于 2013-05-19T12:47:29.827 回答
1

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

  • 表示层
  • 模型层

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

模型不是类或对象。相反,它包含几组结构,每组结构都负责领域业务逻辑的不同方面。你可以在这里阅读更长的解释。

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

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

至于意见 - 我仍在努力弄清楚。我目前得到的可以在这里阅读。

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

于 2013-05-19T13:08:35.493 回答
1

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

所以,答案是否定的,不是任何东西都是模型、视图或控制器。

于 2013-05-20T18:59:13.007 回答