MVC设计模式中的控制器

时间:2015-08-17 08:05:03

标签: design-patterns

我想问一下,在MVC中为什么我们需要控制器。为什么我们不直接连接模型和视图。如果我们没有控制器会是什么问题?

4 个答案:

答案 0 :(得分:3)

关注点分离,它使程序更易于维护,并允许我们在不破坏其他部分的情况下向系统的不同部分添加更多功能,因为它们彼此独立... https://en.wikipedia.org/wiki/Separation_of_concerns

因此,如果您的域代码及其如何应用于视图的逻辑,然后处理屏幕上数据呈现的代码都在一个地方,那么您将很难更改域代码的一部分,而不必更改将其移动到视图的逻辑部分以及随后呈现它的代码。通过控制器,我们可以将逻辑移动到另一个类中并使其独立于视图,因此当我们正在修复或修改我们的应用程序,我们只需要关注MVC模型的一部分......

答案 1 :(得分:1)

MVC是一种软件架构设计模式,通过划分代码,它使其更具可读性,可维护性和可移植性。

如果删除Controller,将会有许多缺点。包括但不限于:

您的代码结构不会像在MVC中那样清晰。因此,模型中将存在更多代码。它更难阅读和维护。

代码将失去部分可移植性,例如您的Model(DB,Files,Data,...)也需要包含View函数,调用和委托。因此,如果您想使用具有不同UI框架的相同模型,则需要重写或编辑它。就像将应用程序从Mac OS X移植到iOS。

...

控制器像胶水一样工作,它将模型和视图绑定在一起。

答案 2 :(得分:1)

主要'司机之一'分离的表示模式背后是可测试性。控制器允许测试表示逻辑。

答案 3 :(得分:1)

控制器是您连接'模型'和'视图'的地方。有两个不同的域,两种不同的语言; View以“字符串语言”说话,应用程序在另一种语言中说(比如Java语言)。

至少需要那些人;

  • 转换视图参数;用户将它们作为字符串输入到语言对象,如数字,日期等......
  • 验证视图参数;他们来自用户,可能是畸形甚至是恶意的。
  • 创建模型对象(或直接访问数据库)。
  • 错误报告,如果出现问题。
  • 更新视图以表示模型的新状态。

可以隐藏/自动化控制器工作的某些部分;声明性验证,从请求创建自动模型对象,将模型对象绑定到视图层(例如JavaBeans)。

但这不是控制器的替代品;
控制器不是我们编写的代码,而是一些责任所在的“逻辑位置”。即使它不可见,它仍然适用于过去常常在MVC中思考的人。