- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
当我们在面试的时候被问到谈谈你对MVC,MVP,MVVM的理解。
我们该如何回答,下面我们将对这些模式进行总结。
一、web1.0时代
在web1.0
时代,当时并没有前端这个概念,当时如果要开发一个项目,通过java/php/.net
进行开发,项目通常由多个aspx/jsp/php
文件编写,每一个文件同时包含html,css,js,c#/java/php
代码,系统架构如下所示。
这种架构的好处就是简单快捷,但是缺点是jsp
代码难以维护。
为了让开发快捷,然后代码更加易于维护,现在后端衍生了MVC
模式,前端展示以模板的形式出现,此时前后端职责更加清晰,代码也易于维护。此时前端只完成后端MVC
模式下的view
层。具体如下所示。
此时这种开发模式中存在的缺点就是前端的开发效率不高。
二、web2.0时代
自动ajax
的出现,前后端的职责就更加清晰,此时前端可以通过ajax
和后台进行交互,因此,整体架构图可以如下所示。
通过ajax
与后台服务器进行数据交互,前端开发人员只需要编写相关的代码,数据完全由后台进行提供,并且ajax
可以实现异步刷新,减少服务器载荷,此时才出现真正意义上的前端工程师。但是此时在前端一些任何代码都写在一起,不利于前端的后期维护。此时前端也开始存在自己的MVC
架构。
三、前后端分离后的架构演变——MVC
前端的MVC
和后端的类似,具备这View
,Controller
和model
。view:
负责保存应用数据,与后端数据进行同步。controller:
负责业务逻辑,根据用户行为对model
数据进行修改。view:
负责视图逻辑,将model
中的数据可视化出来。
但是在开发中,我们经常会看到另一种模式,如下图所示。
这种模式在开发中更加灵活,但是也存在一些问题。1、数据流比较混乱
,如上图所示,我们view
可以更改model
中的数据,controller
可以更改model
中数据,此时我们无法确定model
中的数据是被谁更改的,更无法追中。2、controller比较单薄,view比较庞大
:我们会更加喜欢直接通过view
来修改model
中的数据,所以更多的代码会放在view
模块中,导致view
中的数据比较庞大。
四、前后端分离后的架构演变——MVPMVP
与MVC
很接近,P指的是Presenter
,presenter
可以理解为中间人,它负责着view
和model
之间的数据流动,防止view
和model
之间直接交流。如下图所示。
presenter
为中间层,这种交互方式相比于MVC
少了一些灵活,并且此时的view
的体积要小很多,相反presenter
的代码体积就大的多,导致代码难以维护。
五、前后端分离后的架构演变——MVVM
首先何为MVVM
,MVVM
可以分解为Model-view-ViewModel
,可以理解为在presenter
上的进阶版。
viewModel
通过实现一套数据响应式机制自动响应model
中的数据变化。
同时viewModel
会实现一套更新策略自动数据变化更新视图。
通过事件监听响应view
中的用户交互修改model
中的数据。
这样在viewModel
中就减少操作大量的DOM
。MVVM
在保持view
和model
松耦合得同时,还减少了维护他们关系的代码,使用户更加专注于业务逻辑,兼顾开发效率和维护。
六、总结
这三种都是框架模式,他们的目标都是为了解决model
和view
之间的耦合度问题。MVC
模式出现较早主要应用在后端,如spring MVC
,等,在前端领域早期也有应用,如Backbone.js
,他的优点是分层清晰,缺点是数据流混乱,并且灵活性带来了难以维护的问题。MVP
模式在是MVC
的进化形式,Presenter
作为中间层负责MV之间的通信,解决两者耦合问题,但p
层过于臃肿会导致维护问题。MVVM
模式在前端领域有广泛的应用,它不仅解决MV
耦合问题,还解决了在维护MC
之间的关系产生了大量代码的问题,提高了开发效率和可读性。
我已经对这个主题进行了一些研究,并且已经在少数应用程序中使用了 MVVM 模式。 我问这个问题是因为有时 MVVM 被称为设计,有时被称为架构模式。 在大多数情况下,MVVM 模式称为设计模式。但是就
我开始使用 MVVM Light 版本 4,但我无法理解: 为什么要使用 DataService 和 IDataService? 我应该为模型中的任何类创建数据服务吗? 最佳答案 首先 - 像往常一样
是否可以采用MVVM在一个平台(如 windows phone)中设计模式并以可移植到其他平台(如 android 和 iOS)的方式实现代码的数据绑定(bind)? 或者我最好问问MVVM设计模式在
使用 avalondock在 MVVM 环境中似乎相当具有挑战性。一旦我从 shellview 中分离 DocumentPane,我就会丢失相应的数据上下文并且我的 View 是空的。重新连接时,它会
我对避免背后代码中的代码的方法很感兴趣。 在我看来,有些情况下代码必须放在代码后面。 例如:我有一个未定义列数的网格。无法绑定(bind)列。所以最简单的方法是在后面的代码中生成列。 对于这种情况,我
我熟悉MVVM。实际上,我在SL4中进行了大部分学习。但是,由于最近的需求,我必须使用SL3。我试图将MVVM Light v3与SL3结合使用并利用命令。问题是在SL3中没有按钮的Command属性
UI逻辑在WindowsRT MVVM应用程序中应该在哪里?将其放到ViewModel上真的很“胖”,我想我们失去了MVVM模式的优势之一-在设计人员和程序员之间分配工作变得非常困难。但是,我创建了一
您好,我有 3 个关于 MVVM 模型的问题。 有没有办法绕过那个多余的PropertyChanged("PropName"); 将 POCO 对象包装到 WPF 的最佳方法是什么 INotifyPr
我正在使用 MVVM 模型做一个 Silverlight,我发现很难通过 MVVM 进行事件处理,尤其是事件处理程序在 View 中进行了大量更改,例如启用和禁用按钮、更新媒体元素功能和位置。我还是
我有一个测试应用程序来测试 windows phone 8.1 上的导航,我可以从主页到第二页进入第二页。 问题是,当我单击后退按钮时,我返回桌面屏幕并且应用程序进入后台,所以我必须按住后退按钮才能返
我正在尝试使用并选择好的MVVM Framework,并且其中有很多,因此选择确实很困难。 我想知道其中的2个-CinchV2(Sacha Barber)和MVVM Light Toolkit(Lau
我完全不熟悉Windows 8开发,现在遇到使用MVVM Light混合触摸和键盘导航的问题。 所以,我有个 View 模型的列表,在网格 View 和只要选择其中的一个,导航到选定的 View 模型
我最近下载了MVVMExtraLite,并且有一个名为 Mediator 的帮助程序。我听说过 Messenger (在MVVM Light中)。有什么区别吗? 最佳答案 他们使用相同的模式,即调解员
我正在尝试学习MVVM,并且在区分模型和 View 模型方面有些挣扎。 如果有人可以回答这两个问题,那么对我来说将大有帮助: 说我有一个Objects类,这是一个包含Object的多个Observab
我已经在网上进行了一些研究,并且得出了一些矛盾的答案。这是我的情况: 我有一个引用ClientViewModel的EditClient View ,还有一个还引用ClientViewModel的Add
我正在使用带有 ModelView-First 方法的 MVVM 模式。到目前为止,这工作正常。 现在我有一个用户控件( View ),它应该根据位于我的 ViewModel 中的属性显示各种内容。
我必须创建一个对话框,其中必须在运行时生成列,之前我使用的是 WPF 数据网格,因此在运行时生成列不是问题。现在我必须使用 View 模型,我需要为要在 View 中显示为列的任何字段具有属性。列数在
所以我目前正在使用 Xamarin.Forms 开发一个应用程序。 Xamarin Forms 使用 MVVM 模式,我觉得使用这种模式有点舒服,但我确实有一些问题。为了简单起见,我将使用一个单页应用
是否有在MVVM应用程序中使用Autofac的示例?我不确定在MVVM环境中如何控制生命周期和对象处置。 我知道我可以创建一个生命周期并从其下解决,但这确实更像是服务定位器模式而不是IoC模式。 最佳
我想我遗漏了一些简单的东西,但我找不到任何例子来说明如何做到这一点......另外,如果我使用的某些术语是错误的,请原谅我。 我只想使用绑定(bind)到 Kendo Observable 对象的 H
我是一名优秀的程序员,十分优秀!