Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns MVC设计模式中的控制器_Design Patterns - Fatal编程技术网

Design patterns MVC设计模式中的控制器

Design patterns MVC设计模式中的控制器,design-patterns,Design Patterns,我想问,在MVC中,为什么我们需要控制器。为什么我们不直接连接模型和视图。如果我们没有控制器,会有什么问题 分离关注点,它使程序更易于维护,并允许我们在不破坏其他部分的情况下为系统的不同部分添加更多功能,因为它们彼此独立。。。 因此,如果您的域代码以及如何将其提供给视图的逻辑,以及处理屏幕上数据显示的代码都在同一个位置,那么您很难更改域代码的某些部分,而不必更改将其移动到视图的逻辑部分以及然后介绍它。通过控制器,我们可以将逻辑移到另一个类中,使其独立于视图,因此当我们修复或修改应用程序时,我们

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

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


因此,如果您的域代码以及如何将其提供给视图的逻辑,以及处理屏幕上数据显示的代码都在同一个位置,那么您很难更改域代码的某些部分,而不必更改将其移动到视图的逻辑部分以及然后介绍它。通过控制器,我们可以将逻辑移到另一个类中,使其独立于视图,因此当我们修复或修改应用程序时,我们只需要关注MVC模型的一部分…

MVC是一种软件体系结构设计模式,通过划分代码使其更具可读性,可维护和便携

如果卸下控制器,将有许多缺点。包括但不限于:

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

代码将失去部分可移植性,例如,您的模型(数据库、文件、数据等)也需要包含视图函数、调用和委托。因此,如果您想在不同的UI框架中使用相同的模型,您需要重写或编辑它。比如将应用程序从MacOSX移植到iOS


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

分离的表示模式背后的主要“驱动因素”之一是可测试性。控制器允许测试表示逻辑。

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

至少有必要这样做

  • 转换视图参数;它们由用户作为字符串输入到语言对象,如数字、日期等
  • 验证视图参数;它们来自用户,可能是格式错误,甚至是恶意的
  • 创建模型对象(或直接访问数据库)
  • 如果出现问题,则报告错误
  • 更新视图以表示模型的新状态
可以隐藏/自动化控制器工作的某些部分;声明性验证、从请求自动创建模型对象、将模型对象绑定到视图层(例如JavaBeans)

但这不是控制器的更换

控制器不是我们编写的代码,它是一些责任被投入的“逻辑位置”。即使它不可见,对于那些习惯用MVC思考的人来说,它仍然存在。

但是在另一种情况下,它的缺点是什么?因此,如果您的域代码以及如何将其提供给视图的逻辑,然后处理屏幕上数据显示的代码都在同一个位置,那么您很难更改域的某些部分代码,而不必更改将其移动到视图的逻辑部分以及随后显示它的代码。使用控制器,我们可以将逻辑移动到另一个类中,使其独立于视图,因此,当我们修复或修改应用程序时,我们只需关注MVC模型的一部分…@SadiaZar you如果有帮助,我应该接受答案:)事实上,我知道三层的概念,我理解你所说的,但我很困惑,因为这个“为什么”:/另一种情况的缺点是,你不能很容易地测试和替换视图。嗯,@matt_roo的回答非常简单,没有触及你问题的核心。从这里开始,我会做一些背景阅读:可以说,将功能分解为许多松散耦合的组件会降低可读性和可维护性。@DavidOsborne,只有在项目非常小的情况下。在大型项目中,您不能将所有功能放在一个地方。即使在一个相当小的项目中这样做,也会使它在未来无法扩展。也要考虑一个事实,那就是除了你之外的其他人可能想在未来阅读或维护你的项目。