MV*系列架构模型

海思Hi3798MV300系列SDK全解析:从刷机到适配常见机型的完整指南 本文为海思Hi3798MV300系列芯片SDK的深度实战指南,详细解析了从开发环境搭建、内核驱动适配到针对UNT401A、B863AV31-M等常见机型进行完整适配的全流程。内容涵盖Wi-Fi/蓝牙驱动集成、遥控器适配、Root权限获取及GMS集成等核心操作,旨在帮助开发者与爱好者掌握底层开发与固件定制,充分释放设备潜能。 阅读详情

下文仅代表个人理解,可能会有偏差或错误,欢迎评论或私信讨论。

MVC

从软件架构模型角度

MVC 是比较“古老”的架构模型,后面的 MV* 都是基于它进行拓展。MVC 出现的意义是为了提高程序的可维护性与拓展性。在 View 层与 Model 层中添加了 Controller 层作为中转层。

从实现角度

在 Android 中关于 MVC 的实现比较简单粗暴,View 层就是 xml 布局文件,Controller 层就是 Activity/Fragment。但由于 xml 布局文件功能性比较差,与 UI 有关的操作主要靠 Activity/Fragment。所以, Activity/Fragment 同时承载了 View 层与 Controller 层的任务。

优缺点

  • 优点:
    • 通过分层思想划分不同职责,提高了程序的拓展性与可维护性
  • 缺点:
    • 在 Android 中由于 xml 文件功能性太低,导致 Activity/Fragment 承载了 View 与 Controller 职责,导致其复杂度太高,降低了程序可维护性。
    • 三层间是互相持有,耦合度太高。

MVP

从软件架构模型角度

MVP 是从 MVC 派生出来的。Presenter 层相较于 MVC 的 Controller 层除了中转外,还承载了数据处理任务(将从 Model 层中获取的数据处理成 View 层需要的格式)。

从实现角度

在 Android 中 MVP 模型是通过接口实现的,通过定义 View 层与 Presenter 层接口,提高程序拓展性。将页面逻辑处理至 Presenter 层,降低了 Activity/Fragment 的复杂度,提高程序的可维护性。

优缺点

  • 优点:
    • 将页面逻辑抽离到 Presenter 层,降低了 Activity/Fragment 内部的复杂度,使其替代 xml 布局文件承担了 View 层任务。
    • 通过面向接口开发,提高了代码拓展性。
  • 缺点:
    • View 层接口中的方法定义粒度无法保证,太细导致逻辑分散,出现"改不全"问题,太粗导致代码维护性退化。
    • View 层接口仅支持单一实现,例如 Activity 和 Fragment 需要单独实现,导致无法实现跨页面通信。
    • View 层与 Presenter 层相互持有,增加了耦合度,同时由于 Presenter 层持有 View 层(Activity/Fragment) 也会存在内存泄露的风险。
    • Presenter 层生命周期与 Activity 一致,无法处理屏幕旋转等场景。

MVVM

关于 MVVM 架构的理解分歧还是蛮大的,主要有两种:

  • MVVM 指的是 DataBinding
  • MVVM 指的是 View(Activity/Fragment) + ViewModel(Jetpack组件) + Model

其实这两种理解都是对的,只是站在的角度不同。

从软件架构模型角度

MVVM 的核心就是数据绑定,借助数据绑定将 View 层与 Model 层进行解耦。ViewModel 层的作用是一个数据中转站,负责暴露 Model 层数据。所以 MVVM 也是一种数据驱动模式。

从实现角度

MVVM 在 Android 中的实现可借助 Jetpack 组件库。但要注意区分 ViewModel 层并不是指 ViewModel 组件,怎么理解这句话呢?

如果按照严格的软件架构模型实现,那么这里的 ViewModel 层需要依靠 ViewMode + DataBinding 实现。但目前 DataBinding 在大多数的项目中落地情况不是很好,所以大部分项目是通过 ViewModel + LiveData 来实现。

优缺点

  • 优点:
    • 借助 Jetpack 组件库可以实现生命周期感应,并且 ViewModel 生命周期长于 Activity,可处理屏幕旋转等场景。
    • 通过监听/绑定方式,将 View 层与 ViewModel 层进行解耦。
  • 缺点:
    • 通过数据驱动的方式,并且 LiveData 仅支持单一数据类型,导致在复杂页面时 LiveData 的维护成本增加。

MVI

从软件架构模型角度

关于 MVI 目前没有明确的定义。主流的解释是“基于响应式编程实现的事件(状态)驱动模式”。这里与 MVVM 的主要区别就在于,MVVM 是数据驱动,而 MVI 是事件(状态)驱动。

从实现角度

实现 MVI 模型可以通过 View + Presenter + Model 或者 View + JetPack(ViewModel + LiveData/Flow) + Model 方式都实现。关键在于 Model 层与 View 层之间的传递的状态。

怎么理解数据驱动与事件(状态)驱动呢?(以 JetPack 实现为例)

  • 数据驱动:ViewModel 持有的是数据,View 通过监听数据变化触发页面逻辑。
  • 事件(状态)驱动:ViewModel 持有的是页面状态,View 通过监听状态触发页面变换。

关于具体的实现,这里推荐两个示例:

Google 推荐框架模式

目前通过官方最新架构指南中可以发现,官方推荐通过 Jetpack 来实现 MVI 模型。

  • UI Layer: 用于处理页面逻辑。内部包含了 Activity/Fragment(UI Element)、ViewModel(State Holder)
  • Domain Layer: 用于处理 DataLayer 获取的数据,提高代码的复用性。
  • Data Layer: 用于处理业务逻辑。内部包含了数据处理(Repositories)、数据存储(Data Sources)
前端 MV*框架的意义,什么是闭包,JS如何实现面向对象和继承机制,封装,ajax好处弊端,延迟加载,跨域内存泄漏, 闭包是一种特殊的对象。它由两部分构成:函数,以及创建该函数的环境。可以把闭包简单理解成 “定义在一个函数内部的函数”,闭包就是将函数内部和函数外部连接起来的一座桥梁。闭包有如下特性:a. JavaScript允许你使用在当前函数以外定义的变量b. 即使外部函数已经返回,当前函数仍然可以引用在外部函数所定义的变量c. 闭包可以更新外部变量的值d. 用闭包模拟私有方法由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题。 阅读详情

相关推荐

MV3D 论文代码复现

mv3d 论文代码复现

qq_20388971的博客 1910

前端三大MV*模式:MVC、mvvm、mvp模式介绍

模型模型是指代表真实状态内容的领域模型(面向对象),或指代表内容的数据访问层(以数据为中心)。视图就像在MVC和MVP模式中一样,视图是用户在屏幕上看到的结构、布局和外观(UI)。视图模型视图模型是暴露公共属性和命令的视图的抽象。MVVM没有MVC模式的控制器,也没有MVP模式的presenter,有的是一个绑定器。在视图模型中,绑定器在视图和数据绑定器之间进行通信。绑定器声明性数据和命令绑定隐含在MVVM模式中。在Microsoft解决方案堆中,绑定器是一种名为XAML的标记语言。

爱吃Java的羊的博客 2272

基于迁移学习的花卉识别系统

本研究采用了预训练的经典深度学习模型,包括ResNet、AlexNet和VGG,通过微调的方式在Oxford-102数据集和一个自制花卉数据集上进行训练,并对图像进行了多种数据增强操作,以提高模型的泛化能力,致力于实现花卉的高效分类。

m0_71146337的博客 2375

【MV*模型】

理论 MV*模型包括:MVC,MVP,MVVM,MVI。它们的基本思想是相通的:C/P/VM 负责逻辑的处理,Model 提供数据,View 负责显示;目的是相同的:实现视图、业务、数据三个部分代码的解耦。 MVC,MVP,MVVM,MVI是GUI程序演变过程中先后产生的设计模式,后者是前者的改进。三者区别就是解耦程度不同,后者解耦程度更大。 模型 M V * MVC 数据来源 界面 Controller处理业务 MVP 数据来源 界面 Presenter处理业务 MVVM 数据来源

weixin_44304929的博客 736

自动化学报Ctex+texstudio配置方法

自动化学报Latex的模板win10使用方法(CTEX+texstudio)

zxy15924462502的博客 7370

LTspice基础教程-009.LTspice波形测量

<<==上一篇:LTspice基础教程-008.LTspice PWL设置 >>==下一篇:LTspice基础教程-010. 首篇博客文末提供所有相关资源百度网盘分享链接

gaoyong_wang的博客 4万+

MVI架构理解

上面提到,intent指的是用户意图,在代码层面上来说他其实就是个枚举类,在kotlin中可以通过sealed关键字来生成封闭类,这个关键字生成的封闭类在when语句中可以不用写elseobject GetBanners: UserIntent() //定义了一个用户获取Banner的意图State是UI状态,MVI的一个特点就是数据状态统一管理,state是个和Intent一样的枚举,但是不同的是intent是个事件流,state是个状态流。

weixin_43243916的博客 2401

GAMES101作业3-遇到的各种问题及解决方法

记录在做作业3时遇到的一些坑!以及最后的解决办法。

qq_41835314的博客 6816

因子暴露相关(MV模型,SRM模型)

结构化风险模型均值方差模型(Markowitz Mean-Variance Model)结构化风险模型 (Structural Risk Model, SRM) 均值方差模型(Markowitz Mean-Variance Model) 1952 年,马柯维茨发表了《证券组合选择》,建立起现代投资组合理论的框架。马科维茨认为,投资者可以用预期收益率E[Rp]E[R_p]E[Rp​],以及收益率的标...

量化就是探索生活 2300

在 STM32CubeIDE 中针对 STM32F407 移植 ThreadX

在 STM32CubeIDE 中针对 STM32F407 移植 ThreadX,不依赖盗版破解的Keil MDK、IAR等软件。

wangyuewu08的博客 3374

ros2 humble cartographer 2D激光雷达建图

Cartographer是一个支持多平台和传感器配置的SLAM的系统。 本文主要讲述在ros2 humble系统上cartographer的安装方法,以及如何配置参数实现自己的ros2 bag包的离线建图。

weixin_43087302的博客 6937

《SPA设计与架构》之MV*框架

原文   简书原文:https://www.jianshu.com/p/39f8f0aefdc2 大纲   1、认识MV*框架   2、传统UI设计模式  3、对框架的本质认识——框架有效性和框架分类  4、MV*基础概念  5、为什么要用MV*框架 1、认识MV*框架 MV*术语表示基于浏览器的一系列框架,用于构建应用程序的关注分离。这些框架立足于传统 的UI设计模式,但在整个...

weixin_30820077的博客 145

创客学院嵌入式驱动开发——学习资料汇总

1.创客学院知识巩固-01C语言回顾_C/C++_Set_Mode的博客-优快云博客https://blog.youkuaiyun.com/Set_Mode/article/details/94431050 2.创客学院知识巩固-02数据结构_Set_Mode的博客-优快云博客https://blog.youkuaiyun.com/Set_Mode/article/details/94431087 3.创客学院知...

snaking616 5116

前端的复兴之路--MV*

前端的近代历史,近代变更,这个话题就宛如古代后宫剧-一波三折

qq_42201141的博客 218

2026年03月CCF-GESP编程能力等级认证Scratch图形化编程一级真题解析

本文收录于《,订阅后可阅读专栏内所有文章。

人生就是一个不断学习的过程 237

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

QT模型视图MVC系列教程(1)--概念解析与官方资料

在QT官方帮助文档中搜索:Model,找到:Model/View Programming 以及Model/View Tutorial 系列教程,当然看起来有些费劲,但却是最权威的资料。 0、MV架构 该文章来自【暴躁的野生猿】博客,如有非法转载,请读者帮忙举报下。 MVC指的是Model、View、Control,模型视图控制三者分离的一种数据与用户交互的方式。Qt本质上实现的是MV结构,没有Control,其实MV架构已经足以应付大多数应用场景了。其优势是把数据的存储方式和视图的展示方式,.

野生猿-群号1025127672 2475

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

mv背景html代码,深入浅出MV*框架源码(三):Moon的html->code实现

前言MV*框架中模板转化成代码的的过程涉及到编译原理,把这个html->code和第二篇文章的code->html连接起来就是完整的一个流程。词法分析和语法分析html其实就是一系列的字符串,这个将字符串转化成可执行代码的过程一般就叫做编译或者转译,如果会转成机器代码就是编译,否则就是转译。很显然,MV*框架做的事情也是转译。而这个转译又主要分为词法分析和语法分析两个过程。词法分析词法...

weixin_39565332的博客 669

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Linux系列】rsync和mv

需要保留源文件且增量更新 → rsync -a。需要彻底替换目标目录并删除源文件 → mv。如果是部署静态网站,两者均可,但rsync更安全(避免误删文件)。👍🏻呗。❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄👍 👍 👍🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙。

优快云站内信: https://i.youkuaiyun.com/#/msg/chat/qyj19920704 1226

理解框架之MV*

mvc架构 mvc(modal-view-controller)是比较常用的框架,也是早期的后端服务框架,后来随着富客户端的发展,在前端也使用了起来。mvc的目的是把软件分成三个部分,这样关注点分离,便于更好的维护代码,方便进行业务扩展。其各部分的通信如下。 特点: 每个层的通信都是单向通信的。 优点: 职责分离:模块化程度高、Controller可替换、可复用性、可扩展性强。 多视...

weixin_41293999的博客 402

JavaScript MV *框架剖析

快速学习JavaScript MV *框架的关键是要打破他们成一系列的功能。 一个MV *应用程序的主要功能是路由,数据绑定,模板/视图,模型和数据访问。 在这篇文章中,我将介绍每个功能这些功能和显示的代码示例从AngularJS,骨干和灰烬。 你会开始具体了解这些框架正在尝试与您完成并实现他们的相似之处比它们是不同的帮助。 事实上,很明显,大部分的框架从别人的成功大举借贷。 不要太在意认识的...

288

android mv模式,深入了解MV**模式

原标题:深入了解MV**模式无论是哪种MV**系列,都涉及到了Model和View,如果单纯的只有Model和View,他们是没有办法一起协同工作的,所以就有了各种MV..的设计模式MVXX模式:MVCMVPMVVM这三种架构模式都是现在比较流行的,在不同的项目中,可能采用不同的架构模式,今天我们就围绕着这三种架构模式的试用场景介绍一下他们的概念,以及异同。MVC MVC(Model-View-C...

weixin_29945371的博客 304

Chrome 扩展程序 MV3 架构组件概览

Chrome 扩展程序的核心组成部分与上下文类型。

Brightimoon的博客 565

javascript 框架_JavaScript MV *框架剖析

javascript 框架 快速学习JavaScript MV *框架的关键是将其分解为一系列功能。 MV *应用程序的主要功能是路由,数据绑定,模板/视图,模型和数据访问。 在这篇文章中,我将描述这些功能,并为每个功能显示AngularJS,Backbone和Ember的代码示例。 您将开始具体地理解这些框架正在试图帮助您完成哪些工作,并认识到它们之间的相似性大于差异。 实际上,很明显,大多数框...

151

Winform基于OpenCvSharp海康MV-CU系列相机拍照应用

本文详细介绍了海康MV-CU系列面阵相机的硬件配置与软件开发流程。硬件部分包括相机型号规格、电源接线、I/O接口定义及镜头调节方法;软件部分涵盖MVS软件安装、IP配置、SDK安装及Winform应用程序开发。重点阐述了基于OpenCvSharp的相机控制程序实现,包括视频捕获、图像显示、拍照保存等功能,并提供了完整的C#代码实现。最后通过测试验证了程序功能,并指出常见黑屏问题的解决方法。该文档为海康工业相机的应用开发提供了完整的技术参考。

将自动化进行到底... 705

【整理总结】代码沉淀 - Caliburn.Micro - MV*模式短小精悍的框架

Caliburn.Micro - Xaml made easy. web:https://github.com/Caliburn-Micro/Caliburn.Microdocument:http://caliburnmicro.com/documentation/nuget:Install-Package Caliburn.Micro 用于建立各个XAML平台应用...

weixin_30535843的博客 174

深入了解MV**模式

深入了解MV**模式 前言:做客户端开发、前端开发,大致都应该听说过这么几个名词MVC、MVP、MVVM,这些架构的思想大多是为了解决界面应用程序复杂的逻辑问题。同时这些框架的核心目的在于,职责分离,不同的层次要做不同的事情。 无论是哪种MV**系列,都涉及到了Model和View,如果单纯的只有Model和View,他们是没有办法一起协同工作的,所以就有了各种MV…的设计模式 MVXX模式:...

qq_35711549的博客 445
上一篇: Android Studio 插件 — 开发工具类搜集
下一篇: 再见2023,你好2024
青杉`
博客等级 码龄10年 148粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值