什么是MVC,它有什么优势?

时间:2008-08-25 19:26:40

标签: model-view-controller design-patterns

我找到了What are mvp and mvc and what is the difference,但它并没有真正回答这个问题。

我最近开始使用MVC,因为它是我和我的工作伙伴将要使用的框架的一部分。我们之所以选择它是因为它看起来很简单,并且从显示中分离出来的过程,除此之外我们还不知道并且可能会错过这些优势吗?

赞成

  1. 显示和处理分开

  2. 缺点

    1. 目前尚无

11 个答案:

答案 0 :(得分:46)

MVC是 m odel, v iew和 c ontroller的分离 - 仅此而已。这只是一种范式;在设计课程时,你应该有一个理想的想法。避免将这三个类别的代码混合到一个类中。

例如,虽然表格网格视图显然应该显示一次数据,但它不应该有从哪里检索数据的代码,或者它的原生结构(模型< / em>)就像。同样,虽然它可能具有总结列的功能,但实际求和应该发生在控制器中。

'保存文件'对话框(视图)最终将路径(一旦被用户选择)传递到控制器,然后询问模型表示数据,并进行实际保存。

这种责任分离可以提高灵活性。例如,因为视图不关心底层模型,所以支持多种文件格式更容易:只需为每个格式添加一个模型子类。

答案 1 :(得分:12)

关注点分离是最重要的。

能够将这些组件分开,使代码更易于重复使用和独立测试。如果您实际上并不知道MVC是什么,请小心尝试理解人们的意见,因为仍然存在一些关于“模型”是什么的争论(无论是业务对象/ DataSets / DataTables还是它代表底层服务)层)。

我已经看到各种各样的实现称自己为MVC,但并不完全正如Jeff's article中的评论所示,MVC是一个有争议的观点,我认为开发人员不会完全同意这一点。

可以获得所有不同MVC类型的良好总结here

答案 2 :(得分:6)

Jeff有一个post,否则我在Apple的网站上找到了一些有用的文档,在Cocoa教程中(例如this one)。

答案 3 :(得分:3)

我认为使用MVC模式的另一个好处是它为设计打开了通向其他方法的大门,例如MVP / Presenter以及许多其他MV *模式。

如果没有设计“组件”的这种基本隔离,采用这些技术会更加困难。

我认为让你的代码更加基于界面是有帮助的..不仅在单个项目中,你几乎可以开始开发常见的“视图”,这意味着你可以模拟更多使用的“咕噜”代码在您的应用程序中例如,一个非常抽象的“数据视图”,它只需要一堆数据并将其抛给一个共同的网格布局。

编辑:

如果我没记错的话,this is a pretty good podcast on MV* patterns(不久前听过它了!)

答案 4 :(得分:1)

我能想到的一个问题是,您是否需要在视图中快速访问您的数据(例如,像骨骼位置这样的游戏动画数据。)在这种情况下保持分离层是非常低效的。

否则,对于比图形驱动更多数据驱动的大多数其他应用程序,它似乎是驱动UI的合理方式。

答案 5 :(得分:1)

如果您关注stackoverflow播客,您可以听到Jeff(和Geoff?)讨论它的伟大之处。 http://blog.stackoverflow.com/2008/08/podcast-17/。但请记住,使用这些单独的层意味着将来事情变得更容易 - 现在更难。层可以使事情变慢。而你可能不需要它们。但是,不要让它阻止你学习它是什么 - 在构建大型,强大,长寿命的系统时,它是非常宝贵的。

答案 6 :(得分:1)

它分离由Controller控制的Model和View, 就模型而言,您的模型必须遵循OO架构,未来的增强和代码库的其他维护应该非常容易,并且代码库应该是可重用的。

相同的模型可以具有任何视图,例如,相同的信息可以作为不同的图形视图显示。 相同的视图可以具有不同的模型,例如,不同的详细信息可以显示为单个图形,如条形图。 这就是View和Model的可重用性。

可以轻松实现视图的增强和构建视图的新技术的其他支持。

正在研究视图剂量的家伙不需要了解基础模型代码库及其体系结构,反之亦然。

答案 7 :(得分:1)

MVC只是一种通用设计模式,在精简Web应用程序开发的上下文中,使开发人员可以轻松地将HTML标记保存在应用程序的表示层(视图)中,与接收和处理客户端的方法分开请求(控制器)和视图(模型)中返回的数据表示。这一切都与关注点分离有关,即保持代码服务于一个功能目的(例如处理客户端请求)与代码完全不同的功能(例如代表数据)。

为什么花费超过5分钟尝试构建网站的人可以理解需要将HTML标记,JavaScript和CSS保存在单独的文件中,这是相同的原则:如果您只是将所有代码转储到单个文件中文件,你最后得到的意大利面条几乎不可编辑。

既然你要求可能的&#34; cons&#34;:我不是软件架构设计的权威,但根据我在MVC中开发的经验,我认为指出它也很重要遵循严格的,简洁的MVC设计模式对1)轻量级Web应用程序最有用,或者2)作为更大的企业应用程序的UI层。我很惊讶这个规范没有被更多地讨论,因为MVC不包含对业务逻辑,域模型或应用程序数据访问层中任何内容的明确定义。当我开始使用ASP.NET MVC进行开发时(即在我知道其他软件体系结构存在之前),我最终会得到非常臃肿的控制器,甚至看起来充满了业务逻辑的模型,如果我一直在研究企业应用程序,那么让不熟悉我的代码的其他开发者很难修改(即更多的意大利面)。

答案 8 :(得分:1)

这里没有提到的MVC的一个主要优点是MVC提供了支持SEO的RESTful URL。当您明智地命名控制器和操作时,如果他们只查看您的网站Urls,搜索引擎就可以更轻松地找到您的网站。例如,您有一个汽车销售网站和一个显示兰博基尼Veneno汽车的页面,而不是 www.MyCarSale.com/product/6548 参考您可以选择的页面 www.MyCarSale用于搜索引擎优化的.com / SportCar / Lamborghini-Veneno 网址。

Here是对MVC优势的一个很好的答案,here是一篇文章如何创建一个SEO友好的网址。

答案 9 :(得分:0)

MVC架构的主要优点是区分模型,视图和控制器中的项目层,以实现代码的可重用性,易于维护代码和维护。最好的事情是开发人员在项目维护之间添加一些代码感觉很好。

在这里,您可以在Main Advantages of MVC Architecture上看到更多点。

答案 10 :(得分:0)

![mvc架构] [1]

模型 - 视图 - 控制器(MVC)是用于实现用户界面的软件架构模式。它将给定的软件应用程序划分为三个相互关联的部分,以便将信息的内部表示与向用户呈现或接受信息的方式分开。