0

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

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

提前致谢。

4

3 回答 3

4

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

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

这允许清晰的代码结构,其中不同部分更加解耦,这意味着相互依赖更少。

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

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

于 2012-10-28T14:03:28.000 回答
1

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

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

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

通常最有效的是考虑您的数据并了解需要什么样的更新和查询,然后为数据库(或您使用的任何数据存储)构建一个“包装器”,以“抽象”它并最大限度地减少交互在数据库和系统的其余部分之间。但是计划这很困难,并且经常需要大量的试验和错误——绝对不是食谱。

类似地,您有时可以抽象其他领域,但是抽象,例如,GUI 界面通常太难而不值得——不要仅仅编写“包装器”来表示您已经做到了。

请记住,数据库、GUI 系统、应用程序流控制机制等的作者已经在抽象这些接口上付出了相当大的努力(有时太多),因此您进一步的“抽象”通常只不过是一层额外的调用(特别是如果您采用食谱方法)。

于 2012-10-28T14:22:05.030 回答
0

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

于 2012-10-28T13:48:39.927 回答