什么是MVC,它有什么优点?[关闭]
-
09-06-2019 - |
题
我发现 mvp和mvc是什么以及有什么区别 但它并没有真正回答这个问题。
我最近开始使用 MVC,因为它是我和我的工作伙伴将要使用的框架的一部分。我们选择它是因为它看起来很简单,并且过程与显示分离,除此之外还有我们不知道并且可能会错过的优点吗?
优点
- 显示和处理分离
缺点
- 到目前为止还没有
解决方案
MVC 是分离的 米奥德尔, v看看和 C控制器——仅此而已。这只是一个范例;在设计课程时,您应该牢记这一理想。避免将三个类别的代码混合到一个类中。
例如,当表格网格 看法 显然,一旦显示就应该呈现数据,它不应该有关于从哪里检索数据或其本机结构( 模型) 就好像。同样,虽然它可能有一个对列求和的函数,但实际求和应该发生在 控制器.
“保存文件”对话框(看法)最终将路径(一旦用户选择)传递到 控制器, ,然后询问 模型 数据,并进行实际保存。
这种职责分离可以实现未来的灵活性。例如,因为视图不关心底层模型,所以支持多种文件格式更容易:只需为每个添加一个模型子类即可。
其他提示
我认为使用 MVC 模式的另一个好处是它为其他模式打开了大门 方法 到设计,例如 MVP/Presenter First 和许多其他 MV* 模式。
如果没有设计“组件”的这种基本隔离,采用这些技术将会困难得多。
我认为这有助于使您的代码更加基于接口。不仅在单个项目中,您几乎可以开始开发通用“视图”,这意味着您可以模板化应用程序中使用的更多“grunt”代码。例如,一个非常抽象的“数据视图”,它简单地获取一堆数据并将其扔到一个通用的网格布局中。
编辑:
如果我没记错的话 这是一个关于 MV* 模式的非常好的播客 (不久前听过!)
我能想到的一个缺点是,如果您需要真正快速访问视图中的数据(例如,骨骼位置等游戏动画数据)。在这种情况下保持一层分离是非常低效的。
否则,对于大多数其他更多由数据驱动而不是图形驱动的应用程序来说,这似乎是驱动 UI 的合乎逻辑的方式。
如果您关注 stackoverflow 播客,您可以听到 Jeff(和 Geoff?)讨论其伟大之处。 http://blog.stackoverflow.com/2008/08/podcast-17/. 。但请记住,使用这些单独的层意味着未来的事情会更容易,但现在会更困难。和层 能 让事情变慢。而且你可能不需要它们。但不要让这阻止您了解它是什么——在构建大型、健壮、长寿命的系统时,它是无价的。
就模型而言,它将模型和视图分开,而您的模型必须遵循OO体系结构,未来增强功能和代码库的其他维护应该非常容易,并且应该重复使用代码库。
同一模型可以有任意数量的视图,例如,相同的信息可以显示为不同的图形视图。相同的视图可以有不同数量的模型,例如,不同的细节可以显示为单个图表(例如条形图)。这就是视图和模型的可重用性。
视图的增强以及用于构建视图的新技术的其他支持可以轻松实现。
处理视图的人不需要了解底层模型代码库及其架构,反之亦然。
MVC 只是一种通用设计模式,在精益 Web 应用程序开发的背景下,开发人员可以轻松地将 HTML 标记保留在应用程序的表示层(视图)中,与接收和处理客户端请求的方法(控制器)和视图(模型)中返回的数据表示。这一切都与关注点分离有关,即保留服务于一个功能目的的代码(例如,处理客户端请求)与服务于完全不同功能目的的代码隔离(例如代表数据)。
这也是为什么任何花费超过 5 分钟尝试构建网站的人都会意识到将 HTML 标记、JavaScript 和 CSS 保存在单独文件中的必要性的原因:如果您只是将所有代码转储到一个文件中,那么您最终会得到意大利面条,以后几乎无法编辑。
既然您询问了可能的“缺点”: 我不是软件架构设计方面的权威,但根据我在 MVC 中开发的经验,我认为指出遵循严格、简洁的 MVC 设计模式对于 1) 轻量级 Web 应用程序最有用,或者 2 )作为大型企业应用程序的 UI 层。我很惊讶这个规范没有被更多地讨论,因为 MVC 没有包含对业务逻辑、域模型或应用程序数据访问层中任何内容的明确定义。当我开始使用 ASP.NET MVC 进行开发时(即在我知道其他软件架构存在之前),我最终会得到非常臃肿的控制器,甚至视图模型充满了业务逻辑,如果我一直在开发企业应用程序,那么对于其他不熟悉我的应用程序的开发人员来说,这会变得困难要修改的代码(即更多意大利面)。
MVC架构的主要优点是区分项目的模型、视图和控制器层,以实现代码的可重用性,易于维护代码和维护。最好的事情是开发人员感觉很好,可以在项目维护之间添加一些代码。
在这里您可以看到更多要点 MVC架构的主要优点.
![mvc架构][1]
模型-视图-控制器 (MVC) 是一种用于实现用户界面的软件架构模式。它将给定的软件应用程序分为三个互连的部分,以便将信息的内部表示与向用户呈现或从用户接受信息的方式分开。