Model view controller MVC:为什么要分离模型、视图和控制器?

Model view controller MVC:为什么要分离模型、视图和控制器?,model-view-controller,Model View Controller,除了它的“哲学”方面,让我的控制器也成为我的模型是不是一个坏主意 这似乎节省了一些编程时间。我不必在控制器和模型之间创建逻辑,因为这是同一件事。我可以直接与视图交互 把M和C分开有什么意义?模块化——即,将一个模型和控制器集交换为另一个模型和控制器集的能力——是将它们分开的唯一原因吗?在我看来,“交换”模块比(例如)更新模型和控制器要少很多,因为模型中的某些东西正在改变 根据MVC的概念,一个简单的计算器应该有一个控制器和一个用于设置的视图(比如默认设置之类的),这似乎很奇怪。我知道这是一个简

除了它的“哲学”方面,让我的控制器也成为我的模型是不是一个坏主意

这似乎节省了一些编程时间。我不必在控制器和模型之间创建逻辑,因为这是同一件事。我可以直接与视图交互

把M和C分开有什么意义?模块化——即,将一个模型和控制器集交换为另一个模型和控制器集的能力——是将它们分开的唯一原因吗?在我看来,“交换”模块比(例如)更新模型和控制器要少很多,因为模型中的某些东西正在改变



根据MVC的概念,一个简单的计算器应该有一个控制器和一个用于设置的视图(比如默认设置之类的),这似乎很奇怪。我知道这是一个简单的例子,但它似乎适用于所有情况(可能框架除外)。

如果它适用于您,那么它也适用。时期分离模型、视图和控制器的原因在于,大多数企业应用程序的开发都是由一个开发团队完成的


想象一下,10名开发人员试图在您的控制器上工作。但他们想做的只是在模型中添加一些东西。现在你的控制器坏了?他们做了什么?

这些模型通常是独立的组件,可以在控制器之间重复使用。如果你绝对确定你不会在多控制器中重复使用模型,我真的不认为混合这些关注点有什么问题


我想有人可能会争论,如果你打算偏离,为什么还要使用MVC设计。也许有一种更适合你的情况的模式。你能给我们举一个例子,说明你在控制器是模型的情况下所做的事情吗?它将帮助我们了解您正在努力做得更好。

MVC是一种标准模式,在开发社区中得到了很好的理解,并且有很好的理由。这种分离确实使事情易于阅读、易于故障排除、易于查找和测试,因为每个组件都有自己的职责范围


你一定要用它吗?当然不是。但是,通常认为将零件分开是一个好主意。

控制器知道如何将特定视图链接到模型。模型和控制器的分离,除了改进文档和可维护性外,还有一个直接的好处,即允许多个视图显示来自模型的相同信息,而不会增加任何复杂性

这不仅适用于同一应用程序中的多个视图,也适用于应用程序的多个版本中的多个视图变体。您的模型是绝缘的,逻辑上是干净的


在我看来,模型和控制器相结合是一种典型的虚假经济。它可能感觉节省了几分钟,但随着应用程序的开发和增长,它的成本会显著增加。

主要原因是代码的可重用性。如果你在职业生涯中只打算写一个程序,那么也许这并不重要。如果你打算以it为职业,拥有可重复使用的部件是很有价值的。设计良好的模型、控制器和视图类很容易放入其他程序中。我总是这样做

考虑
UITableViewController
,它是一个控制器。现在想象一下,如果它是专门为处理音乐曲目(模型)而设计的,当您想要处理其他内容时,您需要创建一个完全不同的表管理类。避免这场噩梦是MVC在Cocoa中大量使用的原因

还有其他方法可以把事情分开。有些语言重分类而不是授权。但是在Cocoa中,分割程序的主要方法是MVC,它工作得非常好

编辑:这只是开发商业应用程序世界中的更多原因

  • 在MVC中,内存处理要容易得多。您可以保留模型对象,并在视图对象(以及许多控制器对象)离开屏幕时将其丢弃

  • 序列化不包含控制器和视图的模型对象更容易,以多种方式显示相同的数据也更容易。即使在一个“简单”的文本编辑器中,您也可能希望能够进行分屏操作,或者让多个窗口显示同一文档。在MVC中,这很容易

如果您现在或将来不需要灵活性,则不需要太多架构。但大多数真正的项目并不是那么简单。MVC源于施乐编写大型程序的经验,以及将所有内容组合在一起时遇到的困难


编辑2:我在看你之前的编辑:“根据MVC的概念,一个简单的计算器应该有一个控制器和一个视图作为其设置(如默认设置等),这似乎很奇怪。”


这正是MVC的原因。为计算器应用程序保存用户设置所需的所有内容都必须重新编码,这似乎很疯狂。您需要一个通用的“请保存这些用户设置”,它与UI完全分离,并且可以重用。在OSX上,它被称为
NSUserDefaults
,而
计算器
应用程序正是以这种方式存储其配置。

MVC完全是关于管理(数据、表示和业务逻辑的分离)。所以它是这样的:如果你经营一家小公司,拥有一个微软规模的管理层将是一个真正的阻力。但如果你是一家大型企业,没有大中型管理层是不可能的

老实说,在我大学的大部分编程作业中,我把模型和控制器结合起来,因为我认为没有必要分开。但是在大项目上工作?如果你试着不使用s,缺陷将非常明显