47

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

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

优点

  1. 显示和处理分离


缺点

  1. 到目前为止没有
4

11 回答 11

46

MVC 是模型、视图控制器的分离——不多也不少。这只是一个范例;在设计课程时,您应该在脑海中拥有一个理想。避免将这三个类别的代码混合到一个类中。

例如,虽然表格网格视图显然应该在显示后呈现数据,但它不应该有关于从哪里检索数据的代码,或者它的原生结构(模型)是什么样的。同样,虽然它可能具有对列求和的功能,但实际求和应该发生在控制器中。

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

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

于 2008-08-25T19:31:57.250 回答
14

关注点分离是最重要的。

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

我见过各种自称为 MVC 但并不完全正确的实现,正如Jeff 文章中的评论显示 MVC 是一个有争议的观点,我认为开发人员永远不会完全同意。

此处提供了所有不同 MVC 类型的完整汇总。

于 2008-08-25T20:57:21.353 回答
7

Jeff 有一篇关于它的帖子,否则我在 Apple 的网站上找到了一些有用的文档,在 Cocoa 教程中(例如这个)。

于 2008-08-25T19:31:58.873 回答
3

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

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

我认为这有助于使您的代码更加基于界面。. 不仅在单个项目中,而且您几乎可以开始开发通用“视图”,这意味着您可以模板化更多在您的应用程序中使用的“grunt”代码. 例如,一个非常抽象的“数据视图”,它简单地获取一堆数据并将其扔到一个通用的网格布局中。

编辑:

如果我没记错的话,这是一个关于 MV* 模式的非常好的播客(不久前听过!)

于 2008-08-25T20:57:21.790 回答
2

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

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

由于您要求可能的“缺点”:我不是软件架构设计方面的权威,但根据我在 MVC 中开发的经验,我认为还需要指出,遵循严格、简洁的 MVC 设计模式对于 1) 轻量级 Web 应用程序或 2 最有用) 作为大型企业应用程序的 UI 层。我很惊讶这个规范没有被更多地讨论,因为 MVC 不包含对您的业务逻辑、域模型或应用程序数据访问层中的任何内容的明确定义。当我开始在 ASP.NET MVC 中进行开发时(即在我知道其他软件架构甚至存在之前),我最终会得到非常臃肿的控制器,甚至是充满业务逻辑的视图模型,如果我一直在从事企业应用程序的工作,就会有使其他不熟悉我的代码的开发人员难以修改(即更多意大利面条)。

于 2015-09-18T03:18:25.380 回答
1

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

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

于 2008-08-25T21:01:27.473 回答
1

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

于 2008-08-26T03:03:54.107 回答
1

它将模型和视图分开,由一个控制器控制,就模型而言,您的模型必须遵循 OO 架构,未来的增强和代码库的其他维护应该非常容易,代码库应该是可重用的。

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

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

从事视图工作的人不需要了解底层模型代码库及其架构,反之亦然。

于 2010-04-05T19:02:01.027 回答
1

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

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

于 2016-01-27T00:40:18.710 回答
0

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

在这里,您可以看到更多关于MVC 架构的主要优势的观点。

于 2014-07-02T14:30:24.287 回答
0

![mvc 架构][1]

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

于 2014-07-16T10:35:00.540 回答