关于模型视图控制器:什么是MVC,它的优点是什么?

关于模型视图控制器:什么是MVC,它的优点是什么?

What is MVC and what are the advantages of it?

我发现什么是mvp和mvc,有什么区别,但是它并没有真正回答这个问题。

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

优点

  • 显示和处理分开

  • 缺点

  • 到目前为止没有

  • MVC是模型,视图和控制器的分离,仅此而已。这只是一个范例。设计课程时,您应该想到的理想。避免将三类代码混为一类。

    例如,虽然表格网格视图显然应该在显示数据后就显示数据,但它不应具有从何处检索数据或其本机结构(模型)是什么样的代码。同样,尽管它可能具有汇总列的功能,但实际的汇总应该在控制器中进行。

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

    责任的这种分离允许将来的灵活性。例如,由于视图不关心基础模型,因此支持多种文件格式更加容易:只需为每个模型添加一个模型子类。


    关注点分离是一个难题。

    能够将这些组件分开,使得代码更易于重用和独立测试。如果您实际上不知道MVC是什么,请谨慎尝试理解人们的意见,因为关于"模型"是什么(无论是业务对象/数据集/数据表还是代表基础服务)仍有一些争议。层)。

    我已经看到了各种各样的称为MVC的实现,但并不是完全一样,正如Jeff文章中的注释所显示的那样,MVC是一个有争议的观点,我认为开发人员永远不会完全同意。

    这里提供了所有不同MVC类型的详细介绍。


    Jeff对此发表了一篇文章,否则,我在Apple网站上的Cocoa教程中找到了一些有用的文档(例如,该文档)。


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

    没有设计"组件"的这种根本隔离,采用这些技术将变得更加困难。

    我认为这有助于使您的代码更加基于接口。不仅在单个项目中,而且您几乎可以开始开发通用的"视图",这意味着您可以模板化应用程序中使用的更多"讨厌"代码。例如,一个非常抽象的"数据视图",该视图仅获取一堆数据并将其放入通用的网格布局中。

    编辑:

    如果我没记错的话,这是关于MV *模式的不错的播客(前一阵子听过!)


    MVC的主要优点之一(此处未提及)是MVC提供了启用SEO的RESTful URL。如果您明智地命名"控制器"和"操作",那么如果搜索引擎仅查看您的网站Urls,就可以更轻松地找到您的网站。例如,您有一个汽车销售网站和一个页面,其中显示了可用的兰博基尼Veneno汽车,而不是使用www.MyCarSale.com/product/6548引用该页面,您可以选择www.MyCarSale.com/SportCar/Lamborghini-Veneno网址作为SEO的目的。

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


    MVC只是一种通用的设计模式,在精益Web应用程序开发的背景下,开发人员可以轻松地将HTML标记保留在应用程序的表示层(视图)中,与接收和处理客户端请求的方法(即控制器)以及在视图内返回的数据表示形式(模型)。它的所有有关的关注点分离,也就是,保持,供应从代码螯合一个官能目的(例如处理客户机请求),用作(例如表示数据)完全不同的功能性用途的代码。

    这就是为什么花费超过5分钟试图建立网站的任何人都可以理解将HTML标记,JavaScript和CSS保留在单独文件中的必要性的相同原理:如果将所有代码都转储到一个文件中,最终出现意粉,之后几乎无法编辑。

    既然您询问了可能的"缺点":我无权从事软件体系结构设计,但是基于我在MVC中的开发经验,我认为指出严格的,简洁的MVC设计模式最有用也是很重要的。用于1)轻型Web应用程序,或2)作为大型企业应用程序的UI层。我很惊讶,这个规范是不是谈过了,因为MVC包含业务逻辑,领域模型,或者您的应用程序的数据访问层中真的什么没有明确的定义。当我开始使用ASP.NET MVC进行开发时(即,在我还不知道其他软件架构存在之前),我最终会拥有非常very肿的控制器,甚至会看到充满业务逻辑的模型,如果我一直在企业应用程序上工作,那将使其他不熟悉我的代码的开发人员很难修改(即更多的意大利面条)。


    它将由控制器控制的模型和视图分开,
    至于型号而言,你的模型必须遵循OO架构,未来的增强和其他维护代码库的应该是很容易的和代码库应该是可重复使用的。

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

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

    从事视图工作的家伙不需要了解底层的Model代码库及其体系结构,反之亦然。


    如果您遵循stackoverflow播客,您会听到Jeff(和Geoff?)讨论其出色之处。 http://blog.stackoverflow.com/2008/08/podcast-17/。但是请记住,使用这些单独的层意味着将来会更轻松-现在更难。分层会使事情变慢。而且您可能不需要它们。但是,不要让它阻止您学习它的含义-构建大型,健壮,长寿的系统时,它是无价的。


    我可以想到的一个缺点是,如果您需要真正快速地访问视图中的数据(例如,诸如骨骼位置之类的游戏动画数据。)在这种情况下,保持一层分隔是非常低效的。

    否则,对于大多数其他驱动程序而不是图形驱动程序的数据驱动的应用程序,这似乎是驱动UI的一种逻辑方法。


    ![mvc体系结构] [1]

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


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

    在这里,您可以看到有关MVC体系结构主要优点的其他几点。


    推荐阅读