Provider MVVM架构
MVVM架构分为M(Model)、V(View)、VM(ViewModel)三个部分,他们分别处理自己的分工,在View和Model之间使用ViewModel作为中介者,使View和Model不受业务逻辑影响。
Model(数据模型):
代表应用程序的数据源,它可以是从数据库、网络请求或其他来源获取的数据。Model 通常是不包含任何视图和逻辑的纯数据对象。
View(视图):
代表应用程序的用户界面,通常由各种 Flutter Widgets 构成。View 负责展示数据和与用户进行交互,但不包含任何业务逻辑。
ViewModel(视图模型):
作为 View 和 Model 之间的桥梁,负责处理 View 的状态和用户的交互,并根据业务逻辑从 Model 中获取数据。ViewModel 通常包含状态管理、数据处理、业务逻辑和与数据层的交互等功能。
MVVM 优点:
分离关注点:MVVM模式可以很好地将应用程序的逻辑(ViewModel)与界面(View)进行分离,在开发过程中更容易维护和测试。
可测试性:ViewModel 是纯逻辑的部分,不依赖于具体的 UI 组件,因此可以使用单元测试来测试 ViewModel 的行为和对数据的处理。
数据绑定:MVVM 模式通过数据绑定实现了 View 和 ViewModel 的自动同步。当 ViewModel 中的数据发生变化时,View 会自动更新,这简化了数据更新的处理,同时提高了开发效率。
松耦合:ViewModel 不依赖于具体的 View 实现,可以在不同的平台和技术栈中重用,提高了代码的可重用性。
MVVM 缺点:
学习成本:MVVM 是一种高级的架构模式,相对于传统的 MVC 或 MVP 模式,学习和理解 MVVM 需要花费一定的时间和精力。
过度设计:在小型项目中,使用 MVVM 可能会导致过度设计,增加了不必要的复杂性。MVVM 适用于复杂的业务逻辑和大型应用程序。
数据流管理:在 MVVM 中,数据流的管理可能会变得复杂。如果不妥善管理数据流,可能会导致数据流混乱和性能问题。
MVVM的5主要类:
Service: 网络请求类
Model: 主要负责转换模型
View: 主要负责呈现UI,通过ViewModel获取数据并展示
Widgets: 单独的UI模块分离
ViewModel: 处理业务逻辑,将数据绑定给View展示
Provider MVVM架构的更多相关文章
- MVVM架构~目录
回到占占推荐博客索引 MVVM在概念上是真正将页面与数据逻辑分离的模式,在开发方式上,它是真正将前台代码开发者(JS+HTML)与后台代码开发者分离的模式(asp,asp.net,php,jsp).在 ...
- MVVM架构~Knockoutjs系列之验证机制的引入
返回目录 对于Knockoutjs本身来说,没有提供验证模块,不过,有第三方的扩展,就像你为jquery库作extensions一样,这讲中我将介绍一个Knockout插件扩展,knockout.va ...
- MVVM架构~使用boxy和knockoutjs实现编辑功能
返回目录 这个功能我认为非常有用,尤其在后台管理系统中,它对用户来说,使用体验这块非常不错,下面是它的截图
- ReactiveCocoa常见操作方法介绍/MVVM架构思想
1.ReactiveCocoa常见操作方法介绍. 1.1 ReactiveCocoa操作须知 所有的信号(RACSignal)都可以进行操作处理,因为所有操作方法都定义在RACStream.h中, ...
- MVVM架构的一次实践,重写iOS头条客户端
前言: 一个iOS头条APP,使用MVVM架构实现,代码中有注释,封装了AFN网络请求,解媾代码,使用起来非常方便.用最经典的TableView展示,后续不断更新,喜欢就star或fork一下,有问题 ...
- MVVM架构~knockoutjs系列之表单添加(验证)与列表操作源码开放
返回目录 本文章应该是knockoutjs系列的最后一篇了,前几篇中主要讲一些基础知识,这一讲主要是一个实际的例子,对于一个对象的添加与编辑功能的实现,并将项目源代码公开了,共大家一起学习! knoc ...
- WPF MVVM 架构 Step By Step(6)(把actions从view model解耦)
到现在为止,我们创建了一个简单的MVVM的例子,包含了实现了的属性和命令.我们现在有这样一个包含了例如textbox类似的输入元素的视图,textbox用绑定来和view model联系,像点击but ...
- iOS MVVM架构总结
为什么使用MVVM iOS中,我们使用的大部分都是MVC架构.虽然MVC的层次明确,但是由于功能日益的增加.代码的维护,使得更多的代码被写在了Controller中,这样Controller就显得非常 ...
- Android -------- MVC,MVP 和 MVVM 架构设计模式
MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用.它本身很容易理解,但是要讲清楚,它与衍生的 MVP 和 MVVM 架构的区别就不容易了. 一.MVC MV ...
- [转]MVVM架构~mvc,mvp,mvvm大话开篇
MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示.作为一种新的模式,MVP与MVC有着一 ...
随机推荐
- Python面向对象——property装饰器、继承(与python2不同点)、多继承(优缺点、Mixins)、属性查找、多继承带来的菱形问题
文章目录 内容回顾 property装饰器 继承 与python2的差别 多继承 为何要用继承 如何实现继承 属性查找 多继承带来的菱形问题 总结: 作业 内容回顾 1.封装=>整合 人的对象. ...
- linux文件、目录权限和所有者
文件.目录权限和所有者 简介:用户对一个文件或目录具有访问权限,这些访问权限决定了谁能访问,以及如何范围这些文件和目录.通过设置权限可以限制或允许以下三种用户访问: 文件的用户所有者(属主) 文件的组 ...
- WSL2 中访问 Windows 的代理的最简易方案
前言 学校的网卡不允许运行虚拟机,所以必须将 WSL 的流量变成主机的流量,但从百度查的方案都是设置 Windows 主机的 IP,都忽视了 Windows 的默认功能,即 mdns 或 Window ...
- .NET 8 候选版本 2 (RC2) 现已可用
.NET 8 候选版本 2 (RC2) 现已可用,并包含了许多 ASP.NET Core 的出色新改进! 这是我们计划在今年晚些时候发布的最终 .NET 8 版本之前分享的最后一个候选版本..NET ...
- jq工具及其常用用法
近来在工作中处理JSON处理较多,深入研究了一下jq,之前对jq的使用一直停留在JSON数据格式化的层面,实际它的能力远不止于此. 在处理JSON数据时,我们经常需要在命令行中进行过滤.查询和编辑的操 ...
- Maze 1D 题解
题目大意 在数轴上给定一串行动指令,类型有两种:向左移动一个单位 / 向右移动一个单位.要求最后一步到达一个没有到达过的位置.可以在数轴上放置若干个障碍物阻碍移动,问在放置的障碍物最少的情况下有多少放 ...
- k8s-服务网格实战-入门Istio
背景 终于进入大家都比较感兴趣的服务网格系列了,在前面已经讲解了: 如何部署应用到 kubernetes 服务之间如何调用 如何通过域名访问我们的服务 如何使用 kubernetes 自带的配置 Co ...
- AtCoder Beginner Contest 327 (ABC327)
A. ab 直接根据题意模拟即可. Code B. A^A 直接枚举 \(i= 1, 2,\dots, 15\),每次看看 \(i ^ i\) 是否等于 \(A\) 即可. Code C. Numbe ...
- Ansible自动化部署工具-role模式安装filebeat实际案例分析
大家好,我是蓝胖子,前面一节我简单的讲了讲Ansible的架构和编排任务的语法,可以发现,通过playbook方式编排任务时,能够将任务文档化,但是在面对比较复杂且不同业务的任务编排时,维护playb ...
- 面试题——为什么 Vue 中不要用 index 作为 key?(diff 算法详解)
前言 在vue中使用v-for时需要,都会提示或要求使用 :key,有的的开发者会直接使用数组的 index 作为 key 的值,但不建议直接使用 index作为 key 的值,有时我们面试时也会遇 ...