首页 > 其他分享 >MVC、MVVM框架

MVC、MVVM框架

时间:2023-03-08 12:23:55浏览次数:61  
标签:MVVM 框架 视图 Controller MVC Model View

MVC简要

如果你做过iOS开发,相信你对这几个东西一定很熟:Model、View、Controller,分别表示数据、视图、控制器。当然,其他方向的开发人员应该不也会太陌生,其实这只是一种设计思想,具体用什么语言和做什么开发并不重要。所谓MVC便是这几个单词的简写,那么它们之间是怎么工作的呢?先看下图。



Model-View-Controller - Apple Developer

这是苹果开发者文档中摘过来的图片,表明了三者之间的关系,简单描述了三者作用
Model:数据模型,用来存储数据
View:视图界面,用来展示UI界面和响应用户交互
Controller:控制器(大管家角色),监听模型数据的改变和控制视图行为、处理用户交互

他们工作和关系看起来是如此清晰,是一种非常好的设计思想,是的,首先声明MVC是一个非常好的架构思想,你必须要掌握。


MVVM简要

既然MVC这么好,那为什么还要使用MVVM?我们先来看一下MVVM是什么。



Model-ViewModel-View-Controller

上图描述了MVVM一个基本结构,看到了什么,是不是发现比MVC架构中多了一个ViewModel,没错,就是这个ViewModel,他是MVVM相对于MVC改进的核心思想。在开发过程中,由于需求的变更或添加,项目的复杂度越来越高,代码量越来越大,此时我们会发现MVC维护起来有些吃力,首先被人吐槽的最多的就是MVC的简写变成了Massive-View-Controller(意为沉重的Controller)
由于Controller主要用来处理各种逻辑和数据转化,复杂业务逻辑界面的Controller非常庞大,维护困难,所以有人想到把Controller的数据和逻辑处理部分从中抽离出来,用一个专门的对象去管理,这个对象就是ViewModel,是Model和Controller之间的一座桥梁。当人们去尝试这种方式时,发现Controller中的代码变得非常少,变得易于测试和维护,只需要Controller和ViewModel做数据绑定即可,这也就催生了MVVM的热潮。

MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。微软的WPF带来了新的技术体验,如Silverlight、音频、视频、3D、动画……,这导致了软件UI层更加细节化、可定制化。同时,在技术层面,WPF也带来了 诸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由来便是MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型架构框架。它立足于原有MVP框架并且把WPF的新特性糅合进去,以应对客户日益复杂的需求变化。

1 MVVM模式的组成部分

  • 模型

  • 模型是指代表真实状态内容的领域模型(面向对象),或指代表内容的数据访问层(以数据为中心)。

  • 视图

  • 就像在MVC和MVP模式中一样,视图是用户在屏幕上看到的结构、布局和外观(UI)。

  • 视图模型

  • 视图模型是暴露公共属性和命令的视图的抽象。MVVM没有MVC模式的控制器,也没有MVP模式的presenter,有的是一个绑定器。在视图模型中,绑定器在视图和数据绑定器之间进行通信。

  • 绑定器

  • 声明性数据和命令绑定隐含在MVVM模式中。在Microsoft解决方案堆中,绑定器是一种名为XAML的标记语言。绑定器使开发人员免于被迫编写样板式逻辑来同步视图模型和视图。在微软的堆之外实现时,声明性数据绑定技术的出现是实现该模式的一个关键因素。

2 MVVM优点

MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大优点

1. 低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。

2. 可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。

3. 独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xaml代码。

4. 可测试。界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。

3 MVVM与MVP区别:

mvvm模式将Presener改名为View Model,基本上与MVP模式完全一致,唯一的区别是,它采用双向绑定(data-binding): View的 变动,自动反映在View Model,反之亦然。这样开发者就不用处理接收事件和View更新的工作,框架已经帮你做好了。


侵删。

> 参考:[什么是MVVM框架? - 知乎](https://zhuanlan.zhihu.com/p/59467370)

> 参考:[MVC、MVP、MVVM模式的概念与区别 - 简书](https://www.jianshu.com/p/ff6de219f988)

标签:MVVM,框架,视图,Controller,MVC,Model,View
From: https://www.cnblogs.com/jessicaland/p/17191610.html

相关文章

  • 设计模式5——自定义Spring框架
    1、Spring核心功能结构Spring大约有20个模块,由1300多个不同的文件构成。这些模块可以分为:核心容器、AOP和设备支持、数据访问与集成、Web组件、通信报文和集成测试等。下......
  • MVC 中的 Url.Content
    MVC中的Url.ContentUrl.Content可以用来生成网站中的路径,包括图像,文件地址的路径。Content方法并不是MVC网站下“Content”目录。该方法会携带网站部署时的虚拟路......
  • Spring启用Log4日志框架
    配置maven依赖<!--log4j2的依赖--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId>......
  • 详解第一个程序:程序框架、printf、出错怎么办
    程序框架:在最开始学习的时候没必要理解每一句,只需要知道我们的程序都是在框架之内执行的就可以了。 字符串:字符包括数字、字母和汉字等,串就是它们连成一串。  ......
  • AspNet Core MVC项目接入AdminLTE
    AdminLTE是一款基于jQuery和Bootstrap的流行的后台管理界面框架,通过使用AdminLET框架提供的现成的组件可以大幅的提高后台管理界面的开发速度和规范性。参考 http......
  • WPF MVVM框架------ Prism中的事件聚合器(IEventAggregator)
    在.net中,事件的订阅和发布使用比较简单,但具有依赖关系。Prism框架中提供的事件聚合器,可实现多点传送发布/订阅功能,可以用于ViewModel与ViewModel、ViewModel与View以及模......
  • PyUint测试框架:unittest
    unittest是python的内置模块,支持自动化测试,测试用例间可共享setUp(测试前的初始化)以及测试后的清理工作terDown,可以将测试用例合并为集合执行,然后输出测试报告1基本概......
  • 云原生时代顶流消息中间件Apache Pulsar部署实操之轻量级计算框架
    @目录PulsarFunctions(轻量级计算框架)基础定义工作流程函数运行时处理保证和订阅类型窗口函数定义窗口类型滚动窗口滑动窗口函数配置函数示例有状态函数示例窗口函数示例......
  • SpringMVC中的异常处理器
    SpringMVC中的异常处理器目录SpringMVC中的异常处理器一、概述二、异常处理器初始化位置默认策略@ControllerAdvice工作原理RequestMappingHandlerAdapterExceptionHandle......
  • Android 简单学习开源换肤框架(ThemeSkinning)
    Android简单学习开源换肤框架(ThemeSkinning)GitHub地址ThemeSkinning找到初始化View的入口并替换自定义的入口通常我们都是通过setContentView(intID)把View加载到我......