Jetpack Jetpack 是一个由多个库组成的套件,可帮助开发者遵循最佳做法,减少样板代码并编写可在各种 Android 版本和设备中一致运行的代码,让开发者精力集中编写重要的代码。...存储区是唯一依赖于其他多个类的类;在本例中,存储区依赖于持久性数据模型和远程后端数据源。...MVVM MVVM即Model - View - ViewModel的缩写,它的出现是为了将图形界面与业务逻辑,数据模型进行解耦。 MVVM也是Google推崇的一种Android项目架构模型。...之前学习的Jetpack组建,大部分都是为了能够更好地架构MVVM应用程序而设计的。...view:Activity,Fragment和布局文件,用会用到DataBinding组件 dao:Room数据库操作 application:实例化全局文件和获取全局上下文。
当然,前人言传身教的最佳实践也是不一个不可放过的耗资源,比如 Jetpack MVVM 最佳实践。本期的主题项目为你选择了 macOS 神器,工欲善其事必先利器,好用的开发环境也提升你的学习效率。...增长数:1100+ C-Plus-Plus 是一个用 C++ 实现的算法实践,如果你想了解算法的话,不妨看下这个项目。...GitHub 地址→https://github.com/microsoft/PowerToys 2.4 Jetpack MVVM 最佳实践:Jetpack-MVVM-Best-Practice 本周...在这个项目中,作者将展示 Jetpack MVVM 是如何蕴繁于简地将原本十分容易出错、一出错就会耽搁半天时间的开发工作,通过寥寥的几行代码轻而易举地完成。...除了在蕴繁于简的代码中掌握 MVVM 最佳实践,你还可以从这个开源项目中获得的内容 包括: 整洁的代码风格和标准的资源命名规范。 对视图控制器知识点的深入理解和正确使用。
Room 简介 Room 持久化库提供了一个基于 SQLite 的抽象层,以便在利用 SQLite 的全部功能的同时实现更强大的数据库访问 Room 库帮你的 App 在设备上创建一个缓存,并作为此 App...使用@Database注释的类应满足以下条件: 继承了 RoomDatabase 的抽象类 在注解中包含与数据库相关联的实体类列表 包含一个无参抽象方法,并返回使用 @Dao 注释的类。...DAO 包含用于访问数据库的方法 该应用程序使用 Room 数据库来获取与该数据库关联的数据访问对象或 DAO。...Repository 简介 什么是 Repository ? Repository 类抽象出对多个数据源的访问。存储库不是体系结构组件库的一部分,但是建议的代码分离和体系结构的最佳实践。...只有一个参数,并被 @PrimaryKey 注释作为主键,此处 @ColumnInfo 的作用是给此参数取一个别名 c_word ,该别名会被真实的记录于数据库的字段中,如果在同一张表中存在多个可能重复的字段时例如
MVVM 架构的核心思想是将视图、数据和逻辑分离,以便于开发者更好地管理和维护代码。在安卓开发中,MVVM 架构被广泛应用于视图层和数据层之间的交互。...下面是一个 MVVM 架构的代码实例,它实现了一个简单的计算器: kotlinCopy codeclass MainActivity : AppCompatActivity() { private...在安卓开发中,使用数据库存储数据是一种非常常见的做法。...当然,这些技术只是冰山一角,还有许多其他值得探索的技术,希望读者能够深入研究,不断学习和实践。 三、协程 协程是安卓开发中的一个非常重要的概念,它可以让异步操作更加简单、高效、易读。...四、数据库 在安卓开发中,使用数据库存储数据是一种非常常见的做法。安卓提供了 SQLite 数据库,同时也支持其他的数据库,如 Room、Realm 等。
MVVM框架的搭建(一)——背景 MVVM框架的搭建(二)——项目搭建 MVVM框架的搭建(三)——网络请求 MVVM的数据持久化(一)——ROOM的集成 ROOM的使用以及实践 上一篇文章,我们已经介绍了...当中的一个V层 将三者联系起来 */ class MainActivity : AppCompatActivity() { private lateinit var mBinding: ActivityMainBinding...但是就目前的方法来说,每次都需要写的模板化的代码太多了,那么我们有没有什么办法简化呢,答案必然是有的。 后面的文章我们会持续介绍到,希望大家持续关注。...问题 我们可以看到,对于ROOM的存储包括之前用的GreenDao这种类似的存储都有一个问题,就是根据数据库对应的格式一个键里面有对应相应的值,那么当我们的Json返回数据当中包含JsonArray的话...,以前用的方法是,建一个实体 在存的时候使用 public static String boxing(List List) { if (List == null ||
AAC 当做 Android 架构领域的最佳实践,它的出现一定程度上避免了很多不必要的轮子。...一个 App 从全局来看,可以划分为三部分:首先是 UI Controller 层,包含 Activity 和 Fragment;其次是 ViewModel 层,既可以做 MVVM 的 VM、MVP 的...Room 数据库作为数据持久层,其重要性不言而喻,当设备处于离线状态时,数据库可用于缓存数据;当多个 App 需要共享数据时,数据库可以作为数据源,但是基于原生 API 徒手写 CRUD 实在是痛苦,虽然...Room 是 SQLite 之上的应用抽象层,而 SQLite 是一个位于 Android Framework 层的内存型数据库。...Paging 将分页逻辑拆解为三部分: 数据源 DataSource 数据块 PagedList 数据展示 PagedListAdapter DataSource 的数据来源于后端服务或者本地数据库,
AAC 当做 Android 架构领域的最佳实践,它的出现一定程度上避免了很多不必要的轮子。...一个 App 从全局来看,可以划分为三部分:首先是 UI Controller 层,包含 Activity 和 Fragment;其次是 ViewModel 层,既可以做 MVVM 的 VM、MVP 的...Room 数据库作为数据持久层,其重要性不言而喻,当设备处于离线状态时,数据库可用于缓存数据;当多个 App 需要共享数据时,数据库可以作为数据源,但是基于原生 API 徒手写 CRUD 实在是痛苦,虽然...Room 是 SQLite 之上的应用抽象层,而 SQLite 是一个位于 Android Framework 层的内存型数据库。...除了数据适配之外,ViewModel 还有一个强大的用法 —— Fragment 之间共享数据,这样 ViewModel 又扮演了 FLUX 模式中的 store 这一角色,是多个页面(fragment
简介 MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。...开发环境,我们需要一个用于开发的数据库;测试环境,我们需要一个用于系统测试的数据库;生产环境,我们需要一个保存真实数据的生产数据库。...因为DAO层要做的只是后面三步的工作,至于如何连接数据库、连接哪个数据库,DAO层是不关心的。她需要的是一个能够与数据库交互,交执行SQL语句的对象。在使用JDBC时,就是Connection对象。...答案是肯定的,在Mybatis中向DAO层提供的这个能够与数据库交互并执行SQL语句的对象叫做SqlSession。这个是Mybatis最核心的一个对象。...使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏味道(bad smell)”。
我们的问题在于Mapper层和DAO层的代码一模一样,只是为了使用@Mapper这个注解吗?不管是叫 XXXDAO 还是 XXXMapper,都暗示了它们与数据库的关系。...输入和输出 输入参数和输出参数隔离,一般稍大的系统都是分层设计的,最底层是数据存储层,数据库,最上层是对外提供接口调用的应用层,那每一层都有关联的数据对象,所以需要做相应的区分。...对于一些难以说清楚的逻辑,我是这么区分的(不一定正确,但你可以参考):对于传统行业来说,将原来的手动流程变为信息化流程的,都属于业务逻辑;而由信息化带来的增值服务(比如自动发短信通知),就属于应用逻辑,...在 DDD 诞生之前,这些模式就已经存在了,《企业应用架构模式》中甚至还提出了很多可以替代的模式。DDD 只是把这些模式进行组合,形成了一套以领域模型模式为基础的最佳实践。...不要为了用而用DDD,不管代码的分层是不是按DDD的,最重要的是领域模型方式编程。 代码分层,适合自己的最佳实践才是最好的,但是要多学习借鉴。
今天给大家带来的是Jetpack中的架构组件,这个模块的组件可以说就是为MVVM框架服务的,当然每个库也都是可以单独使用的。...迫不及待了吧,跟随我一起看看每个库的神奇之处。 数据绑定 “数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。...2)可观察的数据对象 可观察性是指一个对象将其数据变化告知其他对象的能力。通过数据绑定库,您可以让对象、字段或集合变为可观察。...官方文档 Demo代码地址 Navigation “导航 Navigation 组件旨在用于具有一个主 Activity 和多个 Fragment 目的地的应用。...” 所以Paging就是一个分页库,主要用于Recycleview列表展示。下面我就结合Room说说Paging的用法。
我们将查看技术主管和架构师在实现工作中可以使用的指导方针、最佳实践、框架和工具。...DAO是关系数据库和应用程序之间的契约。它封装了来自web应用程序的数据库CRUD操作的细节。另一方面,存储库是一个单独的抽象,它与dao交互,并向域模型提供“业务接口”。...存储库使用域的通用语言,使用所有必要的dao,并以域所理解的语言为域模型提供数据访问服务。 DAO方法是细粒度的,更接近于数据库,而存储库方法是粗粒度的,更接近于域。...另外,一个存储库类可能注入了多个DAO。存储库和DAO使域模型与处理数据访问和持久性细节分离。 域对象应该仅依赖于存储库接口。这就是为什么注入存储库而不是DAO会产生一个更干净的域模型的原因。...从DDD的角度来看,DTO还有助于维护服务层和UI层之间的分离,其中DO用于域,服务层用于表示层,DTO用于表示层。 Dozer框架用于将一个或多个域对象组装到一个DTO对象中。
使用 五、源码 前言 在上一篇文章中,我讲述了怎么在MVVM框架中搭建网络访问框架,并通过一个必应的每日壁纸做了一次请求接口的访问演示,这篇文章就需要来讲述Android端的本地数据库的使用和在MVVM...,因此就先不做介绍,改成了MMKV库,这个库个人感觉使用起来比DataStore要简单一些,这同样是一个很实用的库。 ...而下面关于创建数据库、创建表、创建Dao类,都与注解有关系。 1. @Entity 下面我们来进行创建,在此之前我现在com.llw.mvvm包下新建一个db包。...而这里还有一个构造方法,为了写数据方便一些,这个方法我们并不需要写入到数据库中,因此一旦我们写了一个有参数的构造方法则需要通过@Ignore将这个构造方法忽略掉,同时也要增加一个无参的构造方法,当然了@...CustomDisposable 针对于两种默认可以写一个自定义工具类,用于处理两种不同的结果处理。
它负责处理数据库的CRUD操作,让业务逻辑与数据访问分离,提高代码的可维护性。 场景1:DAO层的实现步骤 接下来,我们将详细介绍如何在MyBatis中实现DAO层。...我们以一个用户管理的示例来说明: 步骤1:创建数据模型 首先,我们需要定义一个数据模型,用于映射数据库表。...的数据库会话接口,用于执行SQL语句、获取Mapper接口的实现类等操作。...我们可以通过在mybatis-config.xml中配置事务管理器来实现事务的控制。 场景3:DAO层的最佳实践 在实现DAO层时,有一些最佳实践可以帮助我们写出更清晰、可维护的代码。...通过这篇博客,我们深入了解了MyBatis DAO层的实现步骤、核心概念和最佳实践。
Android MVVM框架使用 功能开发之记事本 前言 正文 一、记事本页面 二、编辑页面 三、增加笔记表 ① Bean ② Dao ③ 数据库升级迁移 ④ 新增存储库类 ⑤ 新增ViewModel...⑥ 添加笔记 四、显示笔记列表 五、修改笔记 六、删除笔记 七、源码 八、开心一下 前言 对于一些常规的MVVM框架搭建也有一些了,那么对于一些小功能的开发也需要说明一下,注重实践,本文实践一下。...一、记事本页面 既然要写一个记事本,那么首先要创建一个页面,我的代码依然还是写在MVVM框架中的,在activity包下新建一个NotebookActivity,对应的布局是activity_notebook.xml...二、编辑页面 编辑页面可用于新增笔记、查看笔记、修改笔记、删除笔记,一个页面要具备这些功能,是需要好好设计一下的,先完成简单的界面设计。...,一个用于查询,一个用于添加。
3、最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗? 4、Mybatis是如何进行分页的?...分页插件的原理是什么? 5、简述Mybatis的插件运行原理,以及如何编写一个插件。 6、Mybatis执行批量插入,能返回数据库主键列表吗? 7、Mybatis动态sql是做什么的?...能简述一下动态sql的执行原理不? 8、Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式? 9、Mybatis能执行一对一、一对多的关联查询吗?...3、最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?...6、Mybatis执行批量插入,能返回数据库主键列表吗? 答:能,JDBC都能,Mybatis当然也能。 7、Mybatis动态sql是做什么的?都有哪些动态sql?
使用MyBatis的mapper接口调用时有哪些要求? 最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?...Dao接口里的方法,参数不同时,方法能重载吗 MyBatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理不? MyBatis是如何进行分页的?分页插件的原理是什么?...SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。 相同点 都是对jdbc的封装,都是持久层的框架,都用于dao层的开发。...6)MappedStatement 对象:在 Executor 接口的执行方法中有一个 MappedStatement 类型的参数,该参数是对映射信息的封装,用于存储要映射的 SQL 语句的 id、参数等信息...最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?
持久对象通常与数据库交互,可以被存储和检索。 在面向对象编程中,持久化是指将对象的状态保存到某个非易失性存储介质中,以便在程序结束后能够重新恢复对象状态。...没有标识:值对象的相等性是通过其属性来确定的,没有唯一的标识符。 可以被共享:多个对象可以引用同一个值对象,因为它们的状态是不可变的。...DAO 通常用于将底层数据存储细节与上层业务逻辑分离,从而提高代码的可重用性和可维护性。 DAO 接口主要包括以下几个方面: CRUD 操作:DAO 接口提供了增删改查等基本的数据操作方法。...BO 层可以将底层 DAO 操作组合成一个完整的事务,并在必要的时候进行回滚操作。 对象映射:BO 层负责将底层数据存储的数据模型与上层 Presentation 层的视图模型进行映射。...在实践中,BO 层通常由一些业务逻辑比较复杂的方法组成,这些方法可能会对多个数据库表进行操作,并且需要进行一定的对象映射和转换。
概述 git worktree 命令允许你同时使用和/或管理多个工作树。 那么什么是工作树呢?你已经在使用一个,只是你可能不知道。或者你可以将其称为“工作副本”。...当你以经典方式克隆存储库(或使用创建新存储库git init)时,git 将创建所谓的“主工作树”: 1..git它克隆文件夹中的“裸”存储库 2.它在裸存储库之上创建了一个主工作树;你可能已经知道的只是...如果是这样,那么你将熟悉“我将提交所有我在 WIP 中拥有的东西”方法或隐藏管理地狱。 同时检查一个以上的分支不是梦想吗?这就是为什么。...2.将主要工作树添加到 mvvm 文件夹,比裸存储库高一级;️ 这种结构纯属个人选择,你可以在任何你想要的地方克隆存储库,并在任何你想要的地方签出分支 3.将目录更改为新创建的工作树 4.存储库中提交的文件以与以前相同的方式显示...同样的功能适用于新的工作树:你可以检查其他分支,你可以存储修改后的文件,你可以提交文件,你可以变基,合并等等… 这里唯一需要注意的是,一个分支一次只能在一个工作树中签出。
MVVM数据持久化 之前我们分别介绍了MVVM框架的悲剧,项目搭建以及网络请求,接下来在这篇文章当中,我们来聊一聊MVVM数据持久化的问题,也就是我们常说的缓存 Room Room持久库提供了一个SQLite...用@Database注解的类应满足以下条件: 是一个继承RoomDatabase的抽象类。 在注释中包含与数据库相关联的实体列表。 包含一个具有0个参数的抽象方法,并返回用@Dao注释的类。...DAO: 包含用于访问数据库的方法。 以及这三者之间的关系图: ?...Dao负责操作数据库的方法,也就是说我们一些操作数据库的动作都是在这里完成的。不同的是我们不需要这些都用Dao类当中的注解来定义查询。...我们需要创建一个AppDatabase,这个类是包含了所以的Entity以及操作他们的DAO。
领取专属 10元无门槛券
手把手带您无忧上云