MVVM模式的具体实现

MVVM即Model-View-ViewModel的简写。即模型-视图-视图模型。
模型(Model)指的是后端传递的数据。
视图(View)指的是所看到的页面。
视图模型(ViewModel)是mvvm模式的核心,它是连接view和model的桥梁。
它有两个方向:
一是将视图(View)转化成模型(Model),即将所看到的页面转化成后端的数据。实现的方式是:View事件监听把具体参数更新到一个整体模型中并通过rac传递给ViewMode,实现View和ViewModel共享一个整体数据对象,来达到数据绑定,然后ViewModel向后端请求数据。
二是将模型(Model)转化成视图(View),即将后端传递的数据转化成所看到的页面。实现的方式是:对象解析和通过请求响应来触发更新UI。这两个方向都实现的,我们称之为数据的双向绑定。

MVC是Model-View- Controller的简写。即模型-视图-控制器。
M和V指的意思和MVVM中的M和V意思一样。
C即Controller指的是页面业务逻辑。
使用MVC的目的就是将M和V的代码分离。
MVC是单向通信。也就是View跟Model,必须通过Controller来承上启下。
MVC和MVVM的区别并不是VM完全取代了C,只
是在MVC的基础上增加了一层VM,弱化了C的概念,ViewModel存在目的在于抽离Controller中展示的业务逻辑,而不是替代Controller,其它视图操作业务(如常用的表格和不同视图的交互)等还是应该放在Controller中实现。也就是说MVVM实现的是业务逻辑组件的重用,
使开发更高效,结构更清晰,增加代码的复用性。

下面是我们的MVVM实现:

苹果MVVM架构:
1.页面(基于PPRootViewController的页面,PPRootViewController是UIViewController的子类,PPRootViewController封装了失败UI和无数据UI。包含系统控件)
2.UI控件View(添加的显示元素,包含系统控件或其它View,一般通过setModel来直接展示数据,也可根据数据来实现部分页面逻辑);
3.ViewModel(请求参数校验,业务相关响应参数的对象转换,数据处理和部分业务逻辑);
4.中间件(类似后台网关的组件,处理参数统一添加,消息头填充,可配置的显示和取消蒙层,可配置的错误弹窗显示,token失效跳转登录页面,添加签名,区分get请求和post请求,网络请求地址和参数拼接,响应消息解密与封装成成功处理和失败处理);
5.网络请求组件(AFNetworking,处理和后台交互,超时处理,无网络处理)
一个请求相关流程:1->2>3->4->5或2->3->4->5
是否MVVM架构主要看是是否抽象出ViewModel,和是否使用网络中间间无关,也不是看是否使用Reactive。我目前看到的MVVM都是用Reactive(RAC),不知道是否有其它不使用Reactive(RAC)实现了MVVM,理论是可以的。我也见过使用Reactive(RAC)不是采用MVVM的项目。一般拆分的越细开发越慢,它的好处不是提升了开发速度,而是提高了代码的清晰性,更便于维护,更方便实现ViewModel,View,Controller的文件大小,不至于他们逻辑过于复杂和庞大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/981.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

概率论的学习和整理18:为什么 P(至少成功1次) = Σ P(几何分布) ,总结几何分布和连续失败概率的关系,二项分布和累计成功k次的关系

目录 1 先说结论: 2 Σ几何分布的P(xn) P(n次试验至少成功1次) 2.1 几何分布的概率 2.2 这个是可以证明的,下面是推导过程 2.3 怎么理解呢? 3 另外,P(累计成功k次) ΣP(成功k次的二项分布) 3.1 成功k次的概率 和 累计成…

回收站怎么看当天删除的文件?在回收站中找不到被删除文件怎么回事

在日常使用电脑的过程中,我们常常会遭遇删除文件的错误,这时回收站就像是一剂“后悔药”。然而,当回收站中堆积了许多已删除的文件时,我们如何才能找到当天删除的文件呢?如果回收站在这时无法提供文件,我们…

本地Linux 部署 Dashy 并远程访问

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 转载自cpolar极点云文章:本地Linux 部署 Dashy 并远程访问 简介 Dashy 是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你…

Python应用实例(二)数据可视化(一)

数据可视化(一) 1.安装Matplotlib2.绘制简单的折线图2.1 修改标签文字和线条粗细2.2 矫正图形2.3 使用内置样式2.4 使用scatter()绘制散点图并设置样式2.5 使用scatter()绘制一系列点2.6 自动计算数据2.7 自定义颜色2.8 使用颜色映射2.9 自动保存图表 数…

Visual Studio 自定义的颜色字体不生效

问题描述: 1、dll1中引用第三方库的类不识别,颜色黑白,自定义颜色不生效;定义的是结构体 2、在dll2引用另一个dll1中的结构体。结构体不识别,今天成员函数cpp中自定义颜色不生效。 问题解决方式: 全部清…

【MySQL备份与还原、索引、视图】练习

一、备份与还原 /***************************样例表***************************/CREATE DATABASE booksDB;use booksDB;CREATE TABLE books(bk_id INT NOT NULL PRIMARY KEY,bk_title VARCHAR(50) NOT NULL,copyright YEAR NOT NULL);INSERT INTO booksVALUES (11078, Lear…

ArrayUtil java

文档:ArrayUtil.note 链接:http://note.youdao.com/noteshare?id36896c50b63c788468746a5e32cd0554&sub18EC1C3C5721449CBB8B022BDCBBB6D9 添加链接描述 package top.starp.util;//import netscape.javascript.JSObject;import java.util.List;pub…

Debezium同步之限制目标端数据库写入条数

前言 当我们用debezium进行数据同步 目标端数据库为关系型数据库的时候,源端数据库产生的数据量比较多,当Kakfa抽取过来的数据 大批量同步到目标库数据库的时候,会造成写入条数的拥挤。此事我们需要 在目标端json文件配置限制写入条数。 jso…

macOS 14 Sonama - 小记

文章目录 Sonoma 官方资讯关于 Sonama 命名关于 壁纸Sonoma 官方资讯 macOS Sonoma Preview https://www.apple.com/hk/en/macos/sonoma-preview/官方视频介绍 Apple Events --> Watch the Keynote --> 00:43:13 (约14min) https://www.apple.com/hk/en/apple-events/mac…

树莓派使用Nginx 搭建轻量级网站远程访问

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 转载自cpolar极点云文章:树莓派使用Nginx 搭建轻量级网站远程访问 安装 Nginx(发音为“engine-x”)可以将您的树莓派变成一个强大的 Web 服务器&#…

YOLOv5/v7 添加注意力机制,30多种模块分析⑦,CCN模块,GAMAttention模块

目录 一、注意力机制介绍1、什么是注意力机制?2、注意力机制的分类3、注意力机制的核心二、CCN模块1、CCN模块的原理2、实验结果3、应用示例三、GAMAttention模块1、GAMAttention模块的原理2、实验结果3、应用示例大家好,我是哪吒。 🏆本文收录于,目标检测YOLO改进指南。…

k8s 容器实例command 巧用

说明: 很多时候我不想重新构建镜像,并且想要将完成shell脚本而不仅仅是简单的命令作为k8s容器实例command参数输入并且执行。可以借鉴comfigmap的写法使用管道符来输入一个完整的的文件内容。在k8s容器环境,更加适合使用定时任务定时执行一段…

maven install时报错 Cannot run program “java”

在 /usr/bin 查看有没有java的命令 没有则创建软连接: sudo ln -s /media/hygd/Data/jdk/linux/jdk/jdk/jdk1.8.0_131/bin/java java 路径需要换成自己jdk路径 附:linux配置java和maven和tomcat环境变量 /etc/profile增加 export MAVEN_HOME/media/hyg…

R语言FD包中的maxent函数怎么用

R语言是一种流行的统计分析和数据可视化工具,提供了许多强大的包来支持各种分析任务。其中,FD包(Functional Data Analysis)是一个用于函数型数据分析的包。在FD包中,maxent函数是用于最大熵估计的函数。本文将介绍如何…

2023年iOS App Store上架流程详解(上)

目录 1.注册开发者账号 2.登录并配置人员 3.申请证书和配置文件 一.证书管理​ 二.新建证书​ 三.使用appuploader服务同步证书​ 1)申请证书 2)添加Identifiers和配置App ID 3)申请配置文件 1.在Xcode项目中配置签名 2.上传应用包…

Web3的2048,Sui 8192能否打开全链游戏的大门?

作者:Peng SUN,Foresight News Sui 8192:一局游戏就是一个NFT Sui 8192智能合约基于Move语言编写,构成非常简单,包括游戏、Game Board与排行榜(Leaderboard)三部分,覆盖方块移动、…

前端Vue自定义可自由滚动新闻栏tabs选项卡标签栏标题栏组件

随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。 通过组件化开发,可以有效实现…

【NLP】分步图解transformer 数学示例

一、说明 我知道transformer 架构可能看起来很可怕,你可能在网上或博客上遇到了各种解释。但是,在我的博客中,我将通过提供一个全面的数值示例来努力澄清它。通过这样做,我希望简化对变压器架构的理解。 二、输入和位置编码 让我们解决初始部分,我们将确定输入并计算它们…

苹果Vision Pro手势+眼球融合交互的奥秘

毫无疑问,Vision Pro在眼球追踪手势的融合交互体验上,给AR/VR头戴设备带来了新突破,在用户体验上的提升非常明显。 ​那么,为什么Vision Pro上这一功能会被如此值得关注呢?为了弄清楚,我们先来看看主流VR设…

【Spring Boot】单元测试

单元测试 单元测试在日常项目开发中必不可少,Spring Boot提供了完善的单元测试框架和工具用于测试开发的应用。接下来介绍Spring Boot为单元测试提供了哪些支持,以及如何在Spring Boot项目中进行单元测试。 1.Spring Boot集成单元测试 单元测试主要用…