首页
学习
活动
专区
圈层
工具
发布

Jetpack Compose中MVVM的实现及ViewModel和remember对比

前言 ViewModel 和 remember 是 Jetpack Compose 中用于管理数据的两种不同机制。...数据共享: ViewModel: ViewModel 通常用于存储与界面相关的持久性数据,它可以在多个组件之间共享,比如在同一个 Activity 中的不同 Fragment 之间共享数据。...总的来说: ViewModel 适合用于管理持久性数据和在不同组件之间共享数据。 remember 则适合用于管理短暂的 UI 状态和局部状态。...当 MutableState 对象的值发生改变时,Compose 会根据新的状态重新计算 UI,以确保 UI 反映最新的状态。...:MyViewModel = viewModel() Log.i("ZLog","对象的Code:"+mainViewModel.hashCode()) 注意 : viewModel()方法会根据类型和所在的

2.2K11

根据不同条件使用不同实现类的业务代码设计

场景 此时有一个场景,需要设计一个根据不同的状态和条件采用不同的业务处理方式。 这样大家可能不是太理解。...AliPayServiceImpl implements PayService {} 但是仔细思考后,还是存在一些问题 如果增加一个支付方式后还需要修改,PayWay这个枚举类型 在程序中,仍需要根据不同的条件做...先思考一下这个if else的作用是什么? 答:根据思路①描述,这个if else是用来确定采用哪种支付方式。...我们可以将这块代码抽离出来,让对应的业务实现类实现自己的逻辑实现,然后根据返回值true 或者false决定是否过滤掉这个业务实现类。...就连之前设计的枚举都可以不用,可扩展性大大提升。如需使用,只需修改对应的入参和对应的名称即可。

2.9K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android经典面试题之Kotlin中使用 LiveData、ViewModel快速实现MVVM模式

    使用 Kotlin 实现 MVVM(Model-View-ViewModel)模式是开发 Android 应用程序的一种常见架构方式。...MVVM 模式将应用程序的 UI 逻辑和业务逻辑分离,使用 LiveData、ViewModel 和 DataBinding 可以使代码更加模块化和可维护。...以下是实现 MVVM 模式的步骤和示例: 步骤 Model 层:负责数据的获取和处理,如数据库操作、网络请求等。 View 层:负责 UI 的显示,例如 Activity、Fragment。...ViewModel 层:作为数据和 UI 的桥梁,负责预处理数据,使之适合 UI 显示。使用 LiveData 来观察数据变化。...通过上述步骤和代码,你可以在 Kotlin 中实现一个基本的 MVVM 架构。实际开发中,可能还需要根据具体需求扩展和改进。

    94710

    使用 Architecture Component 实现 MVVM 的正确姿势

    一、MVVM 之初体验 网上关于 MVVM 的介绍非常多,这里不再赘述,直接看一个例子,用直观的代码来感受一下用 MVVM 开发,是一种什么样的感受 class MvvmViewModel : ViewModel...思考一下如果用常规的做法如何实现:加 Callback?还是使用 EventBus?...这里使用 LiveData 和 ViewModel 实现了一个简单的 MVVM:数据的变化能够自动通知 View 然后做出相应的 UI 改变,并且能在 Activity 生命周期结束前停止监听 二、认识...答案肯定是否定的,但是 Android 给我提供了一套组件,可以让我们更方便地用 MVVM 模式来开发,减少我们重复造轮子的工作量 ViewModel ViewModel 是官方提供的,用于管理 UI...) } } 复制代码 三、用 Architecture Components 来实现 MVVM 的正确姿势 参考官博:ViewModel 和 LiveData 的模式和反模式 image.png

    88220

    bat批处理命令根据不同的操作系统设置不同的电源使用方案

    ,控制显示器关机和睡眠时间,这样只要符合策略系统自己就执行了;继续完善,xp和win7系统更改电源方案命令还不一样;最后决定通过360天擎平台推送批处理脚本,然后脚本根据操作系统执行对应的命令,这样终端电源方案被改了...40分钟无人使用进入睡眠状态 3、使用powercfg命令更改xp系统电源方案 目的:主要调整电源方案家用/办公桌计划的关闭显示器时间和使计算机进入休眠状态时间。...xp系统更改电源方案时要加上电源方案名称,可以用powercfg -list查看当前系统的电源方案名称。...5、使用批处理文件设置不同的系统使用不同的命令 @echo off ver|find "5.1" if errorlevel 1 goto win7 if errorlevel 0 goto xp :...monitor-timeout-ac 20 powercfg -change -standby-timeout-ac 20 goto end :other echo otherOS :end pause 实现原理

    2.7K10

    一篇可能会让你爱上MVVM与ReactiveCocoa的文章

    中,而且你的ViewModel不仅这个控制器可以用,其他的控制器也可以用.虽然从单个控制器的逻辑代码量来看,优化不是很显著,但是ViewModel的模块化特性,将在涉及到页面复用以及后期维护时,让人感觉心旷神怡...关于MVVM,网上还有一种观点是,其实可以不要Model层,直接使用ViewModel层来存储数据.个人感觉,如果考虑到单元测试,此时如果有单独的Model部分,可以根据一个Model,直接测试ViewModel...关于ViewModel的自定义下面会具体谈到. 实现ViewModel....必须指出的一点是: ViewModel是为View服务的,它的命名和字段定义应该根据View的需要来进行.本例是一个非常简单的场景.在复杂的场景中,一个model可能对应多个viewModel,此时多个视图可能都是同一种数据的不同展示方式...YFBlogListItemViewModel 博客列表单个单元格的视图模型 添加属性intro: 这个viewModel 供展示博客列表中的单个单元格使用,但根据目前的UI显示,只需要一个字段即可,我们给它命名为

    1.5K60

    MVVM、RxJava、Retrofit三剑合璧,事半功倍

    当然光讲MVVM显得有些空洞,因此本文还会附带上了解经常和它搭配使用的RxJava和Retrofit。...本文仅讨论在Android平台应用开发中的使用,其它平台也相似但可能存在些许差别。 简介 在搭建MVVM项目之前我们先来简单了解下MVVM模式,以及和MVP的区别。...说起更新ui的操作,和以前不同的是,它不会获取到控件之后调用控件的方法实现更新ui,而是依赖DataBinding来实现双向绑定。...DataBinding实现了控件和数据的绑定关系,是实现MVVM模式的工具,这套机制可以实现ui控件和数据之间的动态监听和动态更新。...紧接着就是设置Adapter,这里值得说的是:我在这里用的是CommonAdapter,那么它是怎么实现的呢?

    3.1K40

    如何构建Android MVVM应用程序

    1、概述 Databinding 是一种框架,MVVM是一种模式,两者的概念是不一样的。我的理解DataBinding是一个实现数据和UI绑定的框架,只是一个实现MVVM模式的工具。...在MVVM模式中ViewModel和View是用绑定关系来实现的,所以有了DataBinding 使我们构建Android MVVM 应用程序成为可能。   ...也不写需要根据业务逻辑来更新UI的代码,因为更新UI通过Binding实现,更新UI在ViewModel里面做(更新绑定的数据源即可),Activity 要做的事就是初始化一些控件(如控件的颜色,添加...我们其实还建议,如果一个页面业务非常复杂,不要把所有逻辑都写在一个ViewModel,可以把页面做业务划分,把不同的业务放到不同的ViewModel,然后整合到一个总的ViewModel,这样做起来可以使我们的代码业务清晰...sample ---> 本文涉及的代码均处出于这个项目,sample 一个知乎日报的App的简单实现,代码包含了一大部分 MVVM Light Toolkit 的使用场景,(Data、Command、Messenger

    1.7K10

    MVVM模式和在WPF中的实现(一)MVVM模式简介

    再后来接触到了MVVM,更加体会到了以MVVM模式开发WPF带来的好处。现在除非要求已经不再用Winform了,小工具和测试程序直接在后台写代码,复杂一点的需要长期使用和维护的用MVVM模式。...0x01 MVVM模式简介 MVVM是Model、View、ViewModel的简写,这种模式的引入就是使用ViewModel来降低View和Model的耦合,说是降低View和Model的耦合。...同一个ViewModel可以使用完全不用的View进行展示,同一个View也可以使用不同的ViewModel以提供不同的操作。...0x02 WPF中MVVM的解耦方式 在WPF的MVVM模式中,View和ViewModel之间数据和命令的关联都是通过绑定实现的,绑定后View和ViewModel并不产生直接的依赖。...最后还是要说一下任何设计模式都是参考,都有使用场景,切忌生搬硬套。实际开发中应根据项目特点采取适配性更强的模式。

    1.8K20

    SpringBoot的Slf4j日志功能,实现根据业务不同将日志写进不同的文件

    目录 1 需求 2 实现 1 需求 我们的项目的业务是比较多多,不同的业务想要生成不同的日志到不同的文件里面,这样就好找信息 2 实现 首先就是要写一个logback.xml的文件: <?...-- log日志存放路径 这个存放路径可以写多个,只要起不同的name就可以 --> 的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy...3个业务:主业务,geServer入口业务,jingServer入口业务 分别讲解使用: 主业务的使用:就是使用最原始的@Slf4j的注解方式 @Slf4j @Component public class...入口业务使用:首先就是不要使用@Slf4j的注解,然后就是在LoggerFactory中获取配置文件中定义的logger的业务名称 @Component public class AService {

    1.5K20

    架构模式之MVVM

    $('#name').text('Homer').css('color', 'red');   第三阶段,MVC模式,这个时候就需要服务端应用来配合开发了,用js来根据服务器发送过来的数据进行渲染。   ...虽然我们也可以用jquery甚至用原生js来实现MVVM,但Vue自己已经包含了这个功能以及主打的就是它(双向绑定)。   因此Vue基本是MVVM的代言者(个人看法)。   ...View可以独立于Model变化和修改,一个ViewModel可以绑定到不同的View上,当View变化的时候Model不可以不变,当Model变化的时候View也可以不变。   2. 可重用性。...MVC出现的时候前端还并不是很成熟,很多业务逻辑在后台实现即可,因此当时前端甚至还没有MVC这个概念,MVC的目的就是将Modle和Controller分离,也就是单向通信,而MVVM则是将逻辑重点在前端实现...MVVM的实现   首先创建一个Helloworld级的html页面,在这里我们使用Vue来感受下MVVM。

    1.1K201

    关于 MVVM和MVC的这些,你知道吗?

    视图模型可以实现中介者模式,组织对视图所支持的用例集(Model)的后端逻辑的访问。 ^2 MVVM 的发展历程 MVVM是马丁·福勒的PM(Presentation Model)设计模式的变体。...[^4] 在MVVM框架中,View用于发送用户的交互请求,之后将用户请求转交给ViewModel,ViewModel即可根据用户请求操作Model数据更新,待Model数据更新完毕,便会通知ViewModel...可以绑定到多个不同的View上面,这就体现了MVVM框架的低耦合性。...实现双向数据绑定步骤[^7] 要实现mvvm的双向绑定,就必须要实现以下几点: 实现一个指令解析器Compile,对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数 实现一个数据监听器...架构意义角度(Web端的角度):MVC和MVVM在本质上都是为了实现View和Model的解耦,MVC是通过Controller实现了View和Model的解耦,一般用与客户端,或者Web端的整个架构过程

    98200

    关于 MVVM和MVC的一些总结

    视图模型可以实现中介者模式,组织对视图所支持的用例集(Model)的后端逻辑的访问。 MVVM 的发展历程 MVVM是马丁·福勒的PM(Presentation Model)设计模式的变体。...在MVVM框架中,View用于发送用户的交互请求,之后将用户请求转交给ViewModel,ViewModel即可根据用户请求操作Model数据更新,待Model数据更新完毕,便会通知ViewModel数据发生了变化...实现双向数据绑定步骤 要实现mvvm的双向绑定,就必须要实现以下几点: 实现一个指令解析器Compile,对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数 实现一个数据监听器...架构意义角度(Web端的角度):MVC和MVVM在本质上都是为了实现View和Model的解耦,MVC是通过Controller实现了View和Model的解耦,一般用与客户端,或者Web端的整个架构过程...个人感觉MVVM和MVP的整体架构是有相似的地方的,不同的是面对的问题域不同,MVP是Web架构整体的解决方案,MVVM主要用于构建基于事件驱动的 UI 平台(界面),适用于前端开发领域中数据与界面相混合的情况

    2.9K30

    当MVVM遇到Databinding,京东工程师实现1+1>2

    当然,实现MVVM框架不是只能用DataBinding,可以实现UI和数据绑定的框架都可以,像开源框架RoboBinding等,甚至也可以使用Android Architecture Components...其实在我们使用Databinding的过程中可以发现,单纯的使用Databinding使用有几个痛点: Databinding规则比较多,而且每个人对其理解不同,用起来比较杂乱,导致代码阅读性差; 对于已经使用...>>>> 二、 MVVM-Databinding框架详解 下面我将通过三部分介绍我的MVVM-Databinding框架: 如何使用本框架 本框架的实现过程 本框架的优点及可能的隐患 >>>> 1、如何使用本框架...这里以楼层框架为例,进行相关实现机制的讲解: 1.创建布局文件,生成BR文件占位资源。...BR文件是Databinding编译期间生成的,跟R文件类似,主要作用是当数据改变后,可以用该标识符通知 DataBinding,用新的数据去更新UI。

    1.5K20

    iOS 开发中的 ViewModel

    而且这年头虽然各种 buzz word 盛嚣尘上,但不同领域的人对它们都有不同的理解,看多了说多了自己都有点烦。我今天也不想说到底什么是 MVC,什么是 MVVM,这些我之前在这篇文章有提过一点。...言归正传,今天我主要想谈谈自己对 ViewModel 的一些理解。因为我们不一定要完全照搬某种模式,取其精华然后根据具体项目情况进行应用也挺好的。ViewModel 这个概念我就觉得蛮精华的。...用协议作为类型,往往可以提供更大的灵活性和可扩展性,但是如果是由 View 来实现这个协议,由于 View 已经是数据流的终点了,一旦把处理数据的逻辑写在这里,就不存在什么替换的可能了,这个协议也就只是作为一个限制或者说标识了...不同的 ViewModel 就行了。...利用 RAC 可以更优雅地实现数据绑定和 MVVM 模式。

    1.5K81

    MVI 架构

    MVVM的双向数据绑定主要通过DataBinding实现,不过相信有很多人跟我一样,是不喜欢用DataBinding的,这样架构就变成了下面这样。...MVVM的双向数据绑定主要通过DataBinding实现,但有很多人(比如我)不喜欢用DataBinding,而是View通过LiveData等观察ViewModle的数据变化并自我更新,这其实是单一数据源而不是双向数据绑定...MVI与MVVM很相似,其借鉴了前端框架的思想,更加强调数据的单向流动和唯一数据源,架构图如下所示: 图片 其主要分为以下几部分: Model:与MVVM中的Model不同的是,MVI的Model主要指...通过SingleLiveEvent实现,当然你也可以用Channel当来实现 当状态更新时,通过emit来更新状态 View监听ViewState private fun initViewModel(...软件开发中没有银弹,所有架构都不是完美的,有自己的适用场景,读者可根据自己的需求选择使用。

    18710

    MVVM 进阶版:MVI 架构了解一下~

    MVVM的双向数据绑定主要通过DataBinding实现,不过相信有很多人跟我一样,是不喜欢用DataBinding的,这样架构就变成了下面这样 [1240] View观察ViewModle的数据变化并自我更新...MVVM的双向数据绑定主要通过DataBinding实现,但有很多人(比如我)不喜欢用DataBinding,而是View通过LiveData等观察ViewModle的数据变化并自我更新,这其实是单一数据源而不是双向数据绑定...MVI 与 MVVM 很相似,其借鉴了前端框架的思想,更加强调数据的单向流动和唯一数据源,架构图如下所示 [1240] 其主要分为以下几部分 Model: 与MVVM中的Model不同的是,MVI...通过SingleLiveEvent实现,当然你也可以用Channel当来实现 当状态更新时,通过emit来更新状态 View监听ViewState private fun initViewModel...,所有架构都不是完美的,有自己的适用场景,读者可根据自己的需求选择使用。

    2.2K20
    领券