我一直想知道的东西,但直到现在才有点尴尬:在“正确的”MVC(严格遵守模式)中,一切都必须是模型,视图或控制器吗?如果没有,你能举例说明何时打破这种模式是可取的还是必要的?最后,类(或静态)方法在MVC中的作用是什么?
具体示例:我有模型OneModel
和TwoModel
。没有理由认为它们是从一些超类继承而来的。两者都具有完全不同的属性,但它们共享一个emailAddress
字段,有时我想为每个模型validateEmailAddress()
。我不想在每个模型中复制验证代码,因此我使用类方法ValidationHelper
创建一个validateEmailAddress(String emailAddress)
类,我现在将在OneModel
和TwoModel
中调用每个类{{1}}
我现在打破了模式吗?我该如何解决?
答案 0 :(得分:3)
如果您将模型,视图和控制器视为应用程序的层而不仅仅是表示层的组件,那么您的电子邮件验证类将成为模型层的一部分,因为它包含业务逻辑。我没有看到你打破模式的地方,并不是每个模型类都必须是数据对象。
“严格遵守模式”的问题在于模式随着时间的推移而发展。原始模式适用于单用户应用程序的GUI。后来它适用于网络,但有不同的解释,特别是关于模型和控制器之间以及客户端和服务器之间的责任。因此,准备在没有一个“真实”的情况下得到不同的答案。
答案 1 :(得分:1)
MVC设计模式由两个主要部分组成:
表示层为用户提供了一种与模型层交互的方式,而模型层包含所有业务逻辑和相关任务。
模型不是类或对象。相反,它包含几组结构,每个结构都有域业务逻辑的不同方面作为其职责。您可以阅读更长的解释here。
表示层主要根据它与模型层的交互方式进行划分。你可以说控制器“写”到模型层(通过服务)并从中“读取”视图。
整个MVC设计模式(以及其他MVC启发模式)中最简单的部分应该是控制器。它们接受用户输入并基于该模型层的状态。它们也可以改变视图,但是,当MVC应用于Web时,它更像是一个例外而不是规则。
至于观点 - 我仍在试图解决这些问题。我目前得到的内容可以阅读here。
注意:在应用于网络时,严重缺乏有关视图实施的材料。由于平台完全不同,与桌面应用程序相比,不可能直接移植相同的指南。我还没有找到任何与该主题无关的框架材料,专注于为Web创建视图。
答案 2 :(得分:1)
您必须了解MVC是架构模式。因此,它是一种更高级别的模式,描述了组件的组织方式和相互之间的交互方式。要实现这种组织,您将需要一组专门的组件来为您做“肮脏的工作”。在这个集合中,你可能会有一些组件不适合任何字母M-V-C的定义,一些组件只是帮助功能,另一些组件在层之间的接口上,处理它们的集成。
所以,答案是没有,而不是everthing是模型,视图或控制器。