Model view controller MVC的发明是为了什么?

Model view controller MVC的发明是为了什么?,model-view-controller,web-deployment,Model View Controller,Web Deployment,我是web开发新手,读过一些关于MVC的wiki和讨论。然而,我读得越多,我对它的设计目的就越感到困惑 我只是想知道为什么会发明这种设计模式?它用来解决什么问题 提前感谢。模型视图控制器是为了在代码中分离关注点而创建的,而不是将一个大杂烩全部放在一个blob中。(意大利面代码)视图代码只是表示逻辑,模型是表示域的对象,控制器负责协商业务逻辑和后端服务的集成 创建模型视图控制器是为了在代码中分离关注点,而不是将一个大杂烩放在一个blob中。(意大利面代码)视图代码只是表示逻辑,模型是表示域的对象,

我是web开发新手,读过一些关于MVC的wiki和讨论。然而,我读得越多,我对它的设计目的就越感到困惑

我只是想知道为什么会发明这种设计模式?它用来解决什么问题


提前感谢。

模型视图控制器是为了在代码中分离关注点而创建的,而不是将一个大杂烩全部放在一个blob中。(意大利面代码)视图代码只是表示逻辑,模型是表示域的对象,控制器负责协商业务逻辑和后端服务的集成

创建模型视图控制器是为了在代码中分离关注点,而不是将一个大杂烩放在一个blob中。(意大利面代码)视图代码只是表示逻辑,模型是表示域的对象,控制器负责协商业务逻辑和后端服务的集成

MVC范式的目标本质上是确保一种形式的代码分离。开发代码时经常出现的问题是,代码是连续编写的,其中每个部分都紧跟着另一部分,并且每个部分都直接依赖于其他部分所做的事情

在处理大型项目时,维护和进一步开发代码很快就会成为一个问题。因此,您可以用一种简化的方式来论证,MVC范式试图做的是确保将业务逻辑(例如,执行的代码)与表示逻辑(显示结果的代码)分开。但这两个部分需要相互通信,这是控制器的职责

这允许代码的清晰结构,其中不同的部分更加解耦,这意味着彼此之间的依赖更少

分离还意味着您以更模块化的方式工作,其中每个部分通过接口(用于调用其他部分的一些定义函数和变量)与其他部分交互,这样您就可以更改基础功能,而无需更改代码的其他部分,只要你的界面保持不变


因此,它试图解决的问题是避免代码库过于纠结,以至于您无法在不破坏代码的情况下更改或添加任何内容,这意味着您必须在原始更改之外的任何地方修改代码。

MVC范例的目标本质上是确保代码分离的形式。开发代码时经常出现的问题是,代码是连续编写的,其中每个部分都紧跟着另一部分,并且每个部分都直接依赖于其他部分所做的事情

在处理大型项目时,维护和进一步开发代码很快就会成为一个问题。因此,您可以用一种简化的方式来论证,MVC范式试图做的是确保将业务逻辑(例如,执行的代码)与表示逻辑(显示结果的代码)分开。但这两个部分需要相互通信,这是控制器的职责

这允许代码的清晰结构,其中不同的部分更加解耦,这意味着彼此之间的依赖更少

分离还意味着您以更模块化的方式工作,其中每个部分通过接口(用于调用其他部分的一些定义函数和变量)与其他部分交互,这样您就可以更改基础功能,而无需更改代码的其他部分,只要你的界面保持不变


因此,它试图解决的问题是避免代码库过于纠结,以至于您无法在不破坏代码的情况下更改或添加任何内容,这意味着您必须在原始更改之外的所有地方修改代码。

在某种程度上,这是一种寻找问题的解决方案

作为一个相当古老的程序员,我很清楚“关注点分离”的好处,但是(我并不那么谦虚地认为)MVC在这方面做得并不好,尤其是在实现“烹饪书”的方式时。通常,它只会导致模块的激增,每个功能有三个独立的模块,没有共同的代码或共同的主题来将事情联系在一起并实现真正的目标:最小化复杂性和最大化可靠性/可维护性

“经典”MVC在典型的手机GUI应用程序中尤其不合适,例如,数据库表的管理可能与相应表视图的管理密切相关。将逻辑分散到三个不同的模块中只会使事情变得更加复杂和难以维护

通常有效的方法是考虑您的数据,了解需要哪些类型的更新和查询,然后为数据库(或您使用的任何数据存储)构建一个“包装器”,对其进行“抽象”,并最小化数据库与系统其余部分之间的交互。但计划这件事是很难的,而且经常需要大量的尝试和错误——绝对不是烹饪书

类似地,您有时也可以抽象其他区域,但抽象(比如)GUI界面通常太难了,不值得——不要只写“包装器”来表示您做到了


请记住,数据库、GUI系统、应用程序流控制机制等的作者已经花了相当大的精力(有时太多)抽象这些接口,因此进一步的“抽象”通常只不过是额外的一层调用(特别是如果您采用cook book方法)从某种程度上说,这是一种解决问题的方法

作为一个相当古老的程序员,我很清楚“关注点分离”的好处,但是(我并不那么谦虚地认为)MVC在这方面做得并不好,尤其是在实现时