首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ViewModels and LiveData- Patterns + AntiPatterns

这可以提高可测试性、泄漏安全性和模块化。一般的经验法则是,确保在你的ViewModels没有android.*的导入(android.arch.*等例外)。这同样适用于presenters。...❌ 避免ViewModels对View进行引用。 ViewModels和View之间进行通信的推荐方式观察者模式,使用LiveData来自其他库的观察变量方式。...Observer Pattern img Android设计表现层的一个非常方便的方法让View(ActivityFragment)观察(订阅)ViewModel的变化。...Architecture Blueprints中有一个Clean Architecture的例子。...repository,你可以使用WeakReference,也可以使用事件总线(两者都容易被滥用,甚至被认为有害的)。

1.1K30

Easy Clean architecture on Android

我这几年的学习和成长,深刻的意识到搭建一个Android应用架构件非常痛苦的事,它不仅要满足不断增长的业务需求,还要保证架构自身的整洁,这让事情变得非常具有挑战,但我们必须这样做,因为健壮的Android...Fragment摆放几个View用来展示到屏幕上,后台耗时任务放在Service执行,组件之间使用Broadcast传递数据,由此看来“人人都能成为Android工程师”,真的这样?...另外值得一提的architecture面向软件设计的,它不应该做语言差异,而本文将主要讲述如何结合Clean Architecture构建你的Android应用程序。...具体到Android的框架结构如下图所示: clean architecture structure 你可能有些困惑,为什么Domain指向Data?...它们应该能够实现在Repository定义的接口,具体的实现细节,能够对实体类进行直接操作。

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

把 格子衫 改造得更时尚 | Kotlin & Jetpack 最佳实践技巧

重构 Plaid 的目标不仅是修复内容源 API 接口的失效问题,更重要的应用最新的 Android Jetpack、Kotlin 语言特性和 Android 应用架构指南,因此 Plaid 2.0...本文将为大家分享和总结 Android 团队工程师们重写 Plaid 应用时的实践经验,前面部分将着重分享应用的分层设计,后面部分具体使用 Kotlin 实现的视频,扩展阅读部分提供了更多 Plaid...我们应用里使用了 Android App Bundles 的动态模块功能为新的新闻源模块接入提供可能。...如果 Repository 类只依赖于一个数据源,每次都从后端获取数据而不做任何临时存储的话,在用户离开当前页面重新返回时,应用将必须重新获取数据,即使数据未发生更改也是如此,这将会浪费宝贵的网络带宽,...《31 天,从浅到深轻松学习 Kotlin》, 点击这里 访问 Android 开发者文档网站。

42940

把 格子衫 改造得更时尚 | Kotlin & Jetpack 最佳实践技巧

重构 Plaid 的目标不仅是修复内容源 API 接口的失效问题,更重要的应用最新的 Android Jetpack、Kotlin 语言特性和 Android 应用架构指南,因此 Plaid 2.0...本文将为大家分享和总结 Android 团队工程师们重写 Plaid 应用时的实践经验,前面部分将着重分享应用的分层设计,后面部分具体使用 Kotlin 实现的视频,扩展阅读部分提供了更多 Plaid...我们应用里使用了 Android App Bundles 的动态模块功能为新的新闻源模块接入提供可能。...如果 Repository 类只依赖于一个数据源,每次都从后端获取数据而不做任何临时存储的话,在用户离开当前页面重新返回时,应用将必须重新获取数据,即使数据未发生更改也是如此,这将会浪费宝贵的网络带宽,...,请查看: github.com/android/pla… 关于 Kotlin 的更多知识,可以参考我们之前发布的内容《31 天,从浅到深轻松学习 Kotlin》, 点击这里 访问 Android

83630

(新瓶旧酒)谷歌官方MVP项目学习--浅入源码

这个项目也是金诚先生推荐的2017年Android百大框架排行榜的一个 android-architecture 一句话介绍:google提供的Android当下各种基本框架 上榜理由:看完它,mvp...an MVP architecture.) dev-todo-mvp-kotlin (Conversion of todo-mvp to Kotlin.)...todo-mvp:https://github.com/googlesamples/android-architecture/tree/todo-mvp 应用程序的名字todo-mvp(待办清单-mvp...setPresenter,该方法作用是将presenter实例传入view,其调用时机presenter实现类的构造函数。...Repository 作为M,负责的对数据的处理和回调,通过依赖注入的形式创建,并且Repository(M)可以同时操作远程数据和本地数据,而且M没有V的引用,而和P的联系则是通过callback

75810

如何为 Gradle 的 KTS 脚本添加扩展?

Kotlin DSL 的编译运行示意图 有朋友肯定会发出疑问,两个阶段分别编译出不同的两个类,但名字一样的,这不会冲突?当然不会,二者运行时用的 classloader 都是不一样的。...而且需要特别注意的,我们会在 classpath 阶段的 buildscript 代码块添加 classpath,所以这个阶段与 body 阶段运行时的 classpath 不一样的,因此不是所有...evaluate project 之前,buildSrc 模块的代码就被添加到了 baseProjectClassLoaderScope 当中,这个 classloaderScope 实际上后续所有...需要注意的,我们的示例基于 Gradle 7.0 的,不同版本可能会存在差异。 2.4 如果 Groovy 呢? 之所以这么麻烦,就是因为我们需要兼顾 Kotlin 的静态类型的特性。...这实际上 Groovy 元编程的内容,我们就不展开介绍了。 3. 小结 本节我们以实现一个简单的扩展为背景,先了解了一下 Kotlin DSL 的运行机制,接着又给出了各个范围内实现扩展的方法。

1.3K20

如何为 Gradle 的 KTS 脚本添加扩展?

Kotlin DSL 的编译运行示意图 有朋友肯定会发出疑问,两个阶段分别编译出不同的两个类,但名字一样的,这不会冲突?当然不会,二者运行时用的 classloader 都是不一样的。...而且需要特别注意的,我们会在 classpath 阶段的 buildscript 代码块添加 classpath,所以这个阶段与 body 阶段运行时的 classpath 不一样的,因此不是所有...evaluate project 之前,buildSrc 模块的代码就被添加到了 baseProjectClassLoaderScope 当中,这个 classloaderScope 实际上后续所有...需要注意的,我们的示例基于 Gradle 7.0 的,不同版本可能会存在差异。 2.4 如果 Groovy 呢? 之所以这么麻烦,就是因为我们需要兼顾 Kotlin 的静态类型的特性。...这实际上 Groovy 元编程的内容,我们就不展开介绍了。 3. 小结 本节我们以实现一个简单的扩展为背景,先了解了一下 Kotlin DSL 的运行机制,接着又给出了各个范围内实现扩展的方法。

2K30

Kotlin Fuel库:图像下载过程的异常处理

现代移动和Web开发,处理图像下载一项常见任务。Kotlin作为一种现代的、表达能力强的编程语言,因其简洁性和对Android开发的支持而广受欢迎。...Fuel库一个轻量级的、易于使用的Kotlin HTTP客户端,它提供了一种优雅的方式来发送网络请求并处理响应。然而,在网络请求过程,异常处理不可避免的。...结合现代架构模式现代应用程序开发,通常会结合MVVM、MVPClean Architecture等架构模式。...架构层的异常处理●ViewModel:ViewModel处理异常,并通过LiveDataStateFlow将错误信息传递给UI层。...●RepositoryRepository层可以封装网络请求和数据存储逻辑,同时处理可能的异常。总结Fuel库为Kotlin开发者提供了一个强大而灵活的工具来处理HTTP请求,包括图像下载。

2800

浅析整洁架构之道(二) 初步了解The Clean Architecture

,就笔者用过的几个语言,Java,TypeScript,Kotlin,Swift等,均可以使用上述The Clean Architecture 所以,理所当然的,它更不会与具体的技术框架相关联。...事实上,技术实现细节,这个图中的环型的层的最外层,也就是The Clean Architecture认为它是最不重要的一层。...The Clean Architecture的基本特征 如果你能理解明白上述笔者所说的整洁架构与语言,框架,技术方向无关的,那接下来的基于特征就更进一步说明了这一点。 Robert C....后续笔者再来论述这几个层,在这之前,先明确一个黄金原则,也就是依赖原则 3.2 The Clean Architecture的黄金原则 讲述其它原则之前,有一个必须要明确的原则: The Clean...在这个架构,具体的技术,框架。比如数据库,网络框架等,最外层的。也就意味着你的项目中,核心业务不能调用知道任何与类似JPAHibernate的API调用。 很多人会问,怎么做到?

95410

Android Gradle 插件】自定义 Gradle 插件模块 ⑤ ( 完整总结 ) ★★★

文章目录 一、创建自定义插件类型模块 ( Java or Kotlin Library ) 二、手动导入相关依赖 ( Java | Groovy | Gradle ) 三、 Java or Kotlin...一、创建自定义插件类型模块 ( Java or Kotlin Library ) ---- 选择 " 菜单栏 / New / New Module… " 选项 , " Create New...fileTree(dir: 'libs', includes: ['*.jar']) } 三、 Java or Kotlin Library 模块定义插件 ---- 插件模块的 src/main...// components.java 打包的 jar 包 from components.java } } } Android Studio 工程根目录的...Gradle 插件】自定义 Gradle 插件模块 ② ( 模块定义插件 | 引入自定义 Gradle 插件模块 | 配置 Gradle 插件上传选项 | 配置分组名称版本号 ) , 定义完插件后

1.3K20

Android Gradle 插件】自定义 Gradle 插件模块 ③ ( Gradle 插件模块发布配置 | Windows 本地 Maven 仓库地址 | 将插件上传到本地 Maven 仓库 )

一、自定义 Gradle 插件发布配置 ---- 在上一篇博客 【Android Gradle 插件】自定义 Gradle 插件模块 ② ( 模块定义插件 | 引入自定义 Gradle 插件模块...| 配置 Gradle 插件上传选项 | 配置分组名称版本号 ) , 定义完插件后 , 自定义 Gradle 插件模块 的 build.gradle 构建脚本 , 添加了 插件上传仓库的 配置...Maven 仓库 ; 二、Windows 本地 Maven 仓库地址 ---- Windows 系统 , 本地仓库的目录为 " C:\Users\用户名.m2\repository "...; 我的电脑上 , 实际的目录为 " C:\Users\octop.m2\repository " , 用户名 octop ; 三、将插件上传到本地 Maven 仓库 ---- 执行 Gradle...\repository\kim\hsl\plugin\plugin " 目录 , 内容如下 : 进入到 " C:\Users\octop.m2\repository\kim\hsl\plugin

91510

MVP:Android guidelines

本文中,我将提供一系列准则最佳做法,以便: 解决采用这个架构遇到的最常见问题(至少一些我遇到过的) 发挥这个架构的最大优势 首先,让我们先解释一下这个模式: ?...该模型还可以是与负责这些职责的其他模块通信的接口。例如,如果你使用Repository模式,则模型可以是Repository。...我喜欢用Google Android Architecture repository建议的解决方案:这个contract接口类包含两个接口一个view另一个presenter。...我想说的“contract设计”阶段,你必须定义好每个用户事件,相应的action是什么,逻辑应该属于谁。 5....现在,你有两个选择: 你model层抽象这个行为,当presenter调用repository.get(params)时,如果页面已经缓存,数据源只返回它,否则再调用API。

33730

Android Gradle 插件】自定义 Gradle 插件模块 ① ( Module 模块自定义 Gradle 插件 | 创建自定义插件类型模块 | 手动导入相关依赖 )

文章目录 一、将自定义 Gradle 插件上传到远程仓库 二、创建自定义插件类型模块 ( Java or Kotlin Library ) 三、手动导入相关依赖 ( Java | Groovy | Gradle...Module 模块通过 apply plugin:'com.android.application' plugins { id 'com.android.application' } 方式..., Module 模块 , 导入并使用 Android Gradle 插件 ; 这种方式将 自定义 Gradle 插件 的 jar 包 上传到了 jcenter / google / mavenCentral...远程仓库 ; 二、创建自定义插件类型模块 ( Java or Kotlin Library ) ---- 选择 " 菜单栏 / New / New Module… " 选项 , " Create..., 该 Module 模块的 build.gradle 构建脚本引入上述依赖 ; plugins { id 'java-library' id 'kotlin' id '

2.1K30

Android—Gradle教程(九)完结篇

重点在迁移KTS 1.1 并行编译开启 默认情况下Gradle处理多模块时,往往挨个按顺序处理。...app下面的build.gradle文件设置: android { ...略 buildTypes { release{...1.6 构建一个变体 有许多配置准备app的release 版本的时候需要,但是当你开发app的时候不需要的,开启不必要的构建进程会使你的增量构建或者clean构建变得很慢,因此需要构建一个只保留开发时需要配置的变体...1.8 分多module管理 抽取代码相对独立的功能模块,创建新的module来开发,通过这种方式模块化你的代码将允许构建系统仅仅只编译那些有改动的模块,并将其构建结果缓存下来以被后面的构建使用。...KTS:Kotlin脚本,这是Gradle构建配置文件中使用的一种Kotlin语言形式。Kotlin脚本是可从命令行运行的Kotlin代码。

2.7K20

将构建配置从 Groovy 迁移到 KTS

Project Structure 编辑器不会展开在 buildSrc 文件夹定义的用于库名称版本的常量。 KTS 文件目前项目视图中不提供文本提示。...如果插件来自插件门户不存在的 buildScript 依赖项,那么这些插件 Kotlin 中就必须使用 apply 才能应用。...有两个关键的最佳实践可以更轻松地 Kotlin DSL 的静态上下文中工作: 使用plugins {}块 将本地构建逻辑放在构建的buildSrc目录 该plugins {}块关于保持您的构建脚本声明性...... } staging { ... } KTS ,仅 debug 和 release buildTypes 隐式提供的,而 staging 则必须由您手动创建: buildTypes...: "default_value" 关于Ext Google 官方推荐的一个 Gradle 配置最佳实践项目最外层 build.gradle 文件的ext代码块定义项目范围的属性,然后在所有模块间共享这些属性

1.6K20
领券