Android--重构

重构不是一朝一夕的事情,是一个持续的过程

  • 要注重代码注释,对创建的每一个页面,类,方法,关键变量都要有对应的注释,对于类要写明作者是谁,创建修改时间,还有是做什么。
    这样对后面的同学或者自己时间久了梳理流程的时候,会顺畅很多。类头注释规范可以在setting -> File and Code Templates -> File Header 中添加固定样式
  • 命名规范,包括类,方法,字段,xml布局,string、color、drawable等资源文件
    对于命名要做到见其名,知其意,长一点也没关系,要注重编码规范,对于资源命名,不光要能见名知意,还要开了组件化开发,为了防止后期资源冲突,可以在module的build.gradle中给资源添加前缀限制,就会提示在创建资源时需要添加前缀了
    推荐使用插件:Alibaba Java Coding Guidelines

//给 Module 内的资源名增加前缀, 避免资源名冲突 resourcePrefix "${project.name.toLowerCase().replaceAll("-", "_")}_"

  • 对工具类进行封装,比如Log、Toast、dialog、SharedPreferences(MMKV)、屏幕管理类(dp、px转换,屏幕宽高的获取)线程池等,对于对人维护过的项目,工具类可能就有好几套,删除多余的工具类,汇聚到一起,只维护一套
  • 第三方框架统一,比如网络请求、图片加载等
    对于第三方的网络请求框架,时间太长可能会维护很多套请求框架,比如最早期的HttpURLConnection,Volley,后来的OkHttp,以及Retrofit等,如果存在多套网络请求,如果后期需要修改一些公共参数,比如增加头部参数,更改域名,参数加密等,就很难受了,对于这种问题如果直接全部替换,风险就会很大,要循序渐进,要选择一个稳定性好、性能好的框架。将代码中的请求与网络框架进行解耦,使用工厂模式来负责初始化对应的网络框架,由统一抽象类约束网络框架的行为,这样就算有新的网络框架也可以无需修改业务代码的情况下替换底层框架
  • 使用模块化、组件化,使用模块化、组件化来实现架构的分层
    分析模块分层的颗粒是否符合预期,随着业务的发展,可能之前的模块分层出现问题,代码臃肿,需要考虑是否需要细分
    当项目越来越大,就需要考虑组件化了,在模块化的基础上去做组件化,
    • 模块化是按照业务划分,独立的业务模块,每一个模块业务都可以单独抽取出来作为SDK对外发布使用,比如登录、订单、个人中心、视频,音频
    • 组件化是按照功能划分,指的是单一的功能组件,比如网络、图片、数据库等,划分为基础功能组件,通用UI组件,基础业务组件
  • MVVM、MVP,对代码隔离
    如果项目中已经使用了mvp,那就接着用mvp,不要因为一些东西出来了,比如现在Google强推一个jetpack,就马上换MVVM,那样风险是非常大的,如果需要大的整改可以使用MVVM来进行重构。LiveData + ViewModel优势是很大的
  • 使用设计模式:可以根据自己实际的项目来使用一些设计模式,比如单例,观察者,工厂,Build模式,策略模式,门店模式,装饰模式等
  • 网络数据模式:后端返回的数据结构统一
  • 性能优化:启动、卡顿,内存,启动,布局优化,apk体积
  • 技术文档输出:需要一边重构,一边输出文档
  • 需要定期重构:后续发现有问题的地方,就可以进行重构

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

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

相关文章

入门指南|营销中人工智能生成内容的主要类型 [新数据、示例和技巧]

由于人工智能技术的进步,内容生成不再是一项令人头疼的任务。随着人工智能越来越多地接管手动内容制作任务,营销人员明智的做法是了解现有的不同类型的人工智能生成内容,以及哪些内容从中受益最多。这些工具可以帮助我们制作对您的受众和品牌…

Synchronized锁、公平锁、悲观锁乐观锁、死锁等

悲观锁 认为自己在使用数据的时候一定会有别的线程来修改数据,所以在获取数据前会加锁,确保不会有别的线程来修改 如: Synchronized和Lock锁 适合写操作多的场景 乐观锁 适合读操作多的场景 总结: 线程8锁🔐 调用 声明 结果:先打印发送短信,后打印发送邮件 结论…

【WPF应用16】WPF如何让Canvas上的元素响应鼠标点击事件?

在WPF中,要让Canvas上的元素响应鼠标点击事件,你需要为这些元素添加事件处理程序来处理MouseLeftButtonDown事件。这个事件会在鼠标左键被按下时触发。下面是一篇详细的博客,展示了如何在Canvas上的元素上添加鼠标点击事件处理程序。 1. Can…

AI大模型学习和实践

目录 第一章:AI大模型概述 1.1 什么是AI大模型? 1.2 AI大模型的发展历程 1.3 AI大模型的应用领域 1.4 AI大模型的挑战与机遇 第二章:数学基础与模型理论 2.1 数学在AI大模型学习中的重要性 2.1.1 线性代数 2.2.2 微积分 2.2.3 概率论与统计学 2.2、模型理论的基础…

机器学习(三)

神经网络: 神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。 f为激活(响应)函数: 理想激活函数是阶跃函数,0表示抑制神经元而1表示激活神经元。 多层前馈网络结构: BP(误差逆…

OpenPLC_Editor 在Ubuntu 虚拟机安装记录

1. OpenPLC_Editor在虚拟机上费劲的装了一遍,有些东西已经忘了,主要还是python3 的缺失库版本对应问题,OpenPLC_Editor使用python3编译的,虚拟机的Ubuntu 18.4 有2.7和3.6两个版本,所以需要注意。 2. OpenPLC_Editor …

Svg Flow Editor 原生svg流程图编辑器(四)

系列文章 Svg Flow Editor 原生svg流程图编辑器(一) Svg Flow Editor 原生svg流程图编辑器(二) Svg Flow Editor 原生svg流程图编辑器(三) Svg Flow Editor 原生svg流程图编辑器(四&#xf…

Mac命令行查找SDK/JDK安装位置

要在命令行中查询 Android SDK Platform Tools 的安装位置,可以使用以下步骤: 使用 which 命令: 在命令行中执行以下命令: which adb这将输出 adb 命令的安装路径,通常情况下,它会在 Android SDK 的 platform-tools 目录下。 手动查找: 如果 which adb 没有输出,可以手…

unity中判断方向 用 KeyVertical ,KeyHorizontal 判断ui物体的 方向

float KeyVertical Input.GetAxis("Vertical"); float KeyHorizontal Input.GetAxis("Horizontal"); // 假设 UI 物体在竖直方向上为 Y 轴,水平方向上为 X 轴 Vector2 direction new Vector2(KeyHorizontal, KeyVertical); if (direction…

贪心算法--最大数

个人主页:Lei宝啊 愿所有美好如期而遇 本题链接https://leetcode.cn/problems/largest-number/description/ class Solution { public:bool static compare(int a, int b){return (to_string(a) to_string(b)) > (to_string(b) to_string(a));}bool operato…

幽默记忆TCP/UDP/DNS/三次握手

三次握手 把客户端和服务端比作两个小孩想象一下,你正在和朋友一起玩“猜拳”游戏,但是你们之间的通信线路不够稳定,为了确保游戏开始前大家都准备好了,你们进行了这样一段对话: 第一次握手:你对朋友说&am…

探索 2024 年 Web 开发最佳前端框架

前端框架通过简化和结构化的网站开发过程改变了 Web 开发人员设计和实现用户界面的方法。随着 Web 应用程序变得越来越复杂,交互和动画功能越来越多,这是开发前端框架的初衷之一。 在网络的早期,网页相当简单。它们主要以静态 HTML 为特色&a…

数据库---PDO

以pikachu数据库为例&#xff0c;数据库名&#xff1a; pikachu 1.连接数据库 <?php $dsn mysql:hostlocalhost; port3306; dbnamepikachu; // 这里的空格比较敏感 $username root; $password root; try { $pdo new PDO($dsn, $username, $password); var_dump($pdo)…

【管理咨询宝藏59】某大型汽车物流战略咨询报告

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏59】某大型汽车物流战略咨询报告 【格式】PDF 【关键词】HR调研、商业分析、管理咨询 【核心观点】 - 重新评估和调整商业模式&#xff0c;开拓…

如何开始定制你自己的大型语言模型

2023年的大型语言模型领域经历了许多快速的发展和创新&#xff0c;发展出了更大的模型规模并且获得了更好的性能&#xff0c;那么我们普通用户是否可以定制我们需要的大型语言模型呢&#xff1f; 首先你需要有硬件的资源&#xff0c;对于硬件来说有2个路径可以选。高性能和低性…

StatefulBuilder 和 Builder

前言 果然了解的越多&#xff0c;越发现自己狗屁都不是。StatefulBuilder 和 Builder 之前真的不知道。还是在 对话框状态管理 中了解到了这两个东西。 简介 以下内容来自通义灵码 在Flutter中&#xff0c;StatefulBuilder 和 Builder 都是用来动态构建 widget 树的组件&am…

使用unplugin-auto-import页面不引入api飘红

解决方案&#xff1a;. tsconfig.json文件夹加上 {"compilerOptions": {"target": "ES2020","useDefineForClassFields": true,"module": "ESNext","lib": ["ES2020", "DOM", &q…

Mybatis别名 动态sql语句 分页查询

给Mybatis的实体类起别名 给Mybatis的xml文件注册mapper映射文件 动态sql语句 1 if 2 choose 3 where 4 foreach 一&#xff09;if 查询指定名称商品信息 语法&#xff1a; SELECT * FROM goods where 11 <if test "gName!null"> and g.g_name like co…

Intellij IDEA安装配置Spark与运行

目录 Scala配置教程 配置Spark运行环境 编写Spark程序 1、包和导入 2、定义对象 3、主函数 4、创建Spark配置和上下文 5、定义输入文件路径 6、单词计数逻辑 7、输出结果 8、完整代码&#xff1a; Scala配置教程 IDEA配置Scala&#xff1a;教程 配置Spark运行环境 …

RabbitMQ3.x之五_RabbitMQ中的核心概念

RabbitMQ3.x之五_RabbitMQ中的核心概念 文章目录 RabbitMQ3.x之五_RabbitMQ中的核心概念1. RabbitMQ简介1. 可互操作2. 灵活3. 可靠 2. 核心概念1. Message(消息)2. Publisher(生产者)3. Consumer(消费者)4. Exchange(交换机)5. Queue(队列)6. Binding(绑定)7. Routing-Key(路由…