kotlin——MVVM框架下的大型项目优化
目录
概要
优化思路
一、重构过长的Activity
二、优化臃肿的ViewModel
示例代码:
概要
在大型项目中,随着项目越做越大,activity和viewmodel的代码会越来越多,尽量保持Activity和ViewModel的代码精简和易于维护是非常重要的。个人建议700行以上就应该考虑,尽量让代码控制在1000行以内。
不然随着代码多维护起来困难,代码混乱,有bug时定位问题难,增加需求代码难等问题就会随之而来,那应该怎么办呢?
优化思路
一、重构过长的Activity
- 功能拆分:如果
Activity承载了多个不同功能区域的UI,可以考虑将每个区域封装到单独的Fragment或子Activity中。这样可以将每个功能区域的逻辑和UI代码分开,使Activity更加简洁。 - 提取组件:将重复的UI元素或逻辑封装成自定义View或辅助类,减少Activity的体积。
- 职责分离:确保
Activity只处理与UI生命周期相关的事件和逻辑。将业务逻辑和数据处理移至ViewModel。 - 接口封装:设计接口来隔离Activity与其他层(如数据层)的直接交互,降低耦合度。
- 提取工具类和辅助类:如果
Activity中有一些公共的、可重用的代码片段,可以将其提取到单独的工具类或辅助类中,并在Activity中通过调用这些方法来实现功能。
二、优化臃肿的ViewModel
- 数据抽象:将数据处理逻辑放到专门的Model层或Repository层,ViewModel仅负责协调和触发数据更新。
- 状态管理:使用StateFlow或其他状态管理库来简化状态的持有和更新,避免手动管理大量状态变量。
- 多用LiveData:利用LiveData的观察者模式自动管理数据的生命周期,减少在ViewModel中的生命周期处理代码。
- 逻辑外包:将业务处理逻辑外包给专门的用例类(Use Case Classes)或领域服务(Domain Services)。
- 作用域限定:限定ViewModel的作用范围,例如使用Navigation的Scoped ViewModel,确保ViewModel只在需要的屏幕中使用。
-
数据拆分:如果
ViewModel中处理的数据过多,可以考虑将其拆分为多个小的ViewModel,每个ViewModel只处理一部分数据。这样可以使每个ViewModel更加专注和易于理解。
示例代码:
小结
- 拆分功能:将大型类拆分为多个小类,每个类负责一个特定的功能或职责。
-
代码审查(Code Review):定期进行团队内部代码审查,发现并修复代码中的冗余和不良编码习惯。
相关文章:
kotlin——MVVM框架下的大型项目优化
目录 概要 优化思路 一、重构过长的Activity 二、优化臃肿的ViewModel 示例代码: 概要 在大型项目中,随着项目越做越大,activity和viewmodel的代码会越来越多,尽量保持Activity和ViewModel的代码精简和易于维护是非常重要的。个人…...
echarts实现折线图点击添加标记
文章目录 背景一、代码示例 背景 业务场景体现在功能层面主要两点, 折线图表设置点击事件点击事件与图标渲染标记绑定 对于节点没有被添加标记的可以,弹框提示添加标记,并提供标记内容输入框,已经添加过标记的点,点…...
循环赛日程表
描述 n 2 ^ k个选手 每个选手必须与其他n-1个选手各赛一次每个选手一天赛一次比赛打n-1天 思路 k 3时的解 我们先进行假设:每个选手第一天和自己比,然后分解成4个子问题: (1)14号的第14天,对手1~4号; (2)14号的第58天&a…...
计算机网络:运输层 - 概述
计算机网络:运输层 - 概述 运输层的任务端口号复用与分用UDP协议首部格式 TCP协议面向字节流 运输层的任务 物理层、数据链路层以及网络层,他们共同解决了将主机通过网络互联起来所面临的问题,实现了主机到主机的通信。 网络层的作用范围是…...
使用阿里开源的Spring Cloud Alibaba AI开发第一个大模型应用
背景 前段时间看到Spring推出了SpringAI,可以方便快速的接入ChatGPT等国外的大模型,现在阿里巴巴也紧追脚步推出了Spring Cloud Alibaba AI,Spring Cloud Alibaba AI 目前基于 Spring AI 0.8.1 版本 API 完成通义系列大模型的接入。通义接入…...
`THREE.PointsMaterial` 是 Three.js 中用于创建粒子系统材质的类。它允许你设置粒子系统的外观属性,比如颜色、大小和透明度。
demo案例 THREE.PointsMaterial 是 Three.js 中用于创建粒子系统材质的类。它允许你设置粒子系统的外观属性,比如颜色、大小和透明度。下面是对其构造函数的参数、属性和方法的详细讲解。 构造函数 const material new THREE.PointsMaterial(parameters);参数&am…...
Android-Android Studio-FAQ
1 需求 2 接口 3 Android Studio xml布局代码补全功能失效问题 最终解决方案就是尝试修改compileSdk 为不同SDK版本来解决问题,将原本34修改为32测试会发现xml代码补全功能有效了! 参考资料 Android Studio xml布局代码补全功能失效问题_android studi…...
架构师指南:现代 Datalake 参考架构
这篇文章的缩写版本于 2024 年 3 月 26 日出现在 The New Stack 上。 旨在最大化其数据资产的企业正在采用可扩展、灵活和统一的数据存储和分析方法。这一趋势是由企业架构师推动的,他们的任务是制定符合不断变化的业务需求的基础设施。现代数据湖体系结构通过将数…...
通讯协议大全(UART,RS485,SPI,IIC)
参考自: 常见的通讯协议总结(USART、IIC、SPI、485、CAN)-CSDN博客 UART那么好用,为什么单片机还需要I2C和SPI?_哔哩哔哩_bilibili 5分钟看懂!串口RS232 RS485最本质的区别!_哔哩哔哩_bilibili 喜欢几位…...
基于EXCEL数据表格创建省份专题地图
1 数据源 随着西藏于5月1日发布2022年一季度经济运行情况,31省份一季度GDP数据已全部出炉。 总量方面,粤苏鲁稳居前三;增速方面,23省份高于“全国线”,新疆表现最佳,增速达到7.0%。 表格表现数据不够直观…...
基于java+springboot+vue实现的电商应用系统(文末源码+Lw)241
摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本电商应用系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&a…...
好文!12个策略解决 Kafka 数据丢失问题
哥们儿!有遇到Kafka数据丢失问题的问题吗,你是如何解决的?今天的文章,V哥来详细解释一下,整理了12种解决策略,希望可以帮助你解决项目中的问题:以下是一些常见的解决方案和最佳实践。 生产者确认…...
Android 第三方框架:网络:OkHttp:源码分析:拦截器
文章目录 涉及到的设计模式 责任链模式:ArrayList策略模式:Interceptor和XXXInterceptor源码分析API总结涉及到的设计模式 责任链模式:ArrayList ArrayList 用ArrayList作为保存顺序的数据结构 把系统提供的各种Interceptor和自定义的Interceptor放入ArrayList中 RealI…...
FlowUs AI的使用教程和使用体验
FlowUs AI 使用教程 FlowUs AI特点使其成为提升个人和团队生产力的有力工具,无论是在学术研究、内容创作、技术开发还是日常办公中都能发挥重要作用。现在来看看如何使用FlowUs AI吧! 注册与登录:首先,确保您已经注册并登录FlowU…...
SwiftUI 6.0(iOS 18)ScrollView 全新的滚动位置(ScrollPosition)揭秘
概览 在只有方寸之间大小的手持设备上要想体面的向用户展示海量信息,滚动视图(ScrollView)无疑是绝佳的“东牀之选”。 在 SwiftUI 历史的长河中,总觉得苹果对于 ScrollView 视图功能的升级是在“挤牙膏”。这不,在本…...
阿贝云免费虚拟主机和免费云服务器评测
阿贝云是一家提供免费虚拟主机和免费云服务器的服务商,为用户提供了一个便捷的搭建网站和应用的平台。他们的服务受到了很多用户的好评。用户可以轻松地在阿贝云上创建自己的网站,并享受免费的虚拟主机和云服务器。通过阿贝云的服务,用户可以…...
不懂就问,开通小程序地理位置接口有那么难吗?
小程序地理位置接口有什么功能? 若提审后被驳回,理由是“当前提审小程序代码包中地理位置相关接口( chooseAddress、getLocation )暂未开通,建议完成接口开通后或移除接口相关内容后再进行后续版本提审”,那么遇到这种情况&#x…...
Python 全栈系列256 异步任务与队列消息控制(填坑)
说明 每个创新都会伴随着一系列的改变。 在使用celery进行异步任务后,产生的一个问题恰好也是因为异步产生的。 内容 1 问题描述 我有一个队列 stream1, 对应的worker1需要周期性的获取数据,对输入的数据进行模式识别后分流。worker1我设施为10秒运行…...
从零开始的Ollama指南:部署私域大模型
大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 大模型应用向开发路径:AI代理工作流大模型应用开发实用开源项目汇总大模…...
C++类和对象总结
目录 总结 一、引言 二、类的定义 三、对象的创建与初始化 四、访问控制 五、封装 六、继承 七、多态 八、其他特性 九、总结 C类的定义 C对象的创建和初始化 C类的访问控制 总结 一、引言 C是一种面向对象的编程语言,其核心概念是类和对象。类是对现…...
SpringBoot项目整合Redisson实战:从连接池报错到Redis集群健康检查的完整避坑指南
SpringBoot整合Redisson深度实践:连接池优化与集群健康监控全解析 Redis作为分布式系统的核心组件,其Java客户端Redisson的高阶用法一直是开发者关注的焦点。去年某电商平台大促期间,因Redis集群节点闪断导致的分布式锁失效事故,让…...
BarrageGrab技术深度解析:构建高可用跨平台直播弹幕抓取架构
BarrageGrab技术深度解析:构建高可用跨平台直播弹幕抓取架构 【免费下载链接】BarrageGrab 抖音快手bilibili直播弹幕wss直连,非系统代理方式,无需多开浏览器窗口 项目地址: https://gitcode.com/gh_mirrors/ba/BarrageGrab 在当今直播…...
告别笨重线性电源!用TL494打造高效BUCK模块,给你的老旧设备供电或做充电器
用TL494打造高效BUCK模块:老设备供电与智能充电的终极解决方案 老旧实验室设备嗡嗡作响的线性电源,不仅效率低下,发热严重,还占据宝贵的工作台空间。而一块基于TL494的高效BUCK模块,可以彻底改变这一局面。本文将带你…...
Path of Building终极指南:三步解锁流放之路最强角色构建
Path of Building终极指南:三步解锁流放之路最强角色构建 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding 想要在《流放之路》中打造完美角色却总是迷失在复杂…...
三轴 MEMS 加速度传感器在工业预测性维护中的关键应用
1. 三轴MEMS加速度传感器如何成为工业设备的"听诊器" 想象一下医生用听诊器检查病人心跳的场景。三轴MEMS加速度传感器在工业领域扮演着类似的角色,只不过它"听诊"的对象换成了电机、风机这些设备。这个火柴盒大小的装置(303019mm&…...
Rolify 项目部署指南:从开发环境到生产环境的完整迁移流程
Rolify 项目部署指南:从开发环境到生产环境的完整迁移流程 【免费下载链接】rolify Role management library with resource scoping 项目地址: https://gitcode.com/gh_mirrors/ro/rolify Rolify 是一款功能强大的角色管理库,支持资源范围的权限…...
BooruDatasetTagManager 2.5.0:重构AI训练数据标注的技术架构与效率范式
BooruDatasetTagManager 2.5.0:重构AI训练数据标注的技术架构与效率范式 【免费下载链接】BooruDatasetTagManager 项目地址: https://gitcode.com/gh_mirrors/bo/BooruDatasetTagManager 在计算机视觉和生成式AI模型训练的工作流中,数据标注的质…...
2025版等离子体期刊分区解析:从PRL到PPAP的投稿指南
1. 2025版等离子体期刊分区概览 对于从事等离子体研究的科研人员来说,选择合适的期刊投稿是研究成果传播的关键一步。2025版中科院期刊分区将等离子体相关期刊划分为三个主要层级,每个层级都有其独特的定位和特点。 先说说最顶级的中科院一区期刊。这个层…...
Ubuntu 20.04 LTS下Miniconda3安装与配置全攻略(含常见错误解决)
Ubuntu 20.04 LTS下Miniconda3安装与配置全攻略(含常见错误解决) 如果你正在Ubuntu 20.04 LTS上搭建Python开发或数据科学环境,Miniconda3绝对是一个值得考虑的选择。作为Anaconda的精简版,它保留了核心的conda包管理功能&#x…...
突破Twitter数据限制:Rettiwt-API开源工具零成本数据获取指南
突破Twitter数据限制:Rettiwt-API开源工具零成本数据获取指南 【免费下载链接】Rettiwt-API An API for fetching data from Twitter for free! 项目地址: https://gitcode.com/gh_mirrors/re/Rettiwt-API 在社交媒体数据驱动决策的时代,Twitter作…...
