Flux Architecture on Android

2016年Android开发技术栈与架构演进解析 Android开发技术栈在2016年迎来重要转折,Kotlin语言和React Native等跨平台方案开始崭露头角。从基础架构看,Gradle构建系统和Java 7仍是主流,而UI层则见证了Material Design组件和RecyclerView的普及。技术原理上,响应式编程通过RxJava实现优雅的异步处理,MVP模式则规范了视图与逻辑的分离。这些技术革新为移动应用开发带来了更高效的工程实践,特别是在性能优化方面,Glide等图片加载框架和Realm等数据库方案显著提升了应用流畅度。当前场景下,这些 阅读详情

英文原文:http://lgvalle.xyz/2015/08/04/flux-architecture/

要为安卓应用找到一个好的架构不是一件容易的事情。谷歌似乎不太在乎这个事情,因此在设计模式上,除了Activity 生命周期管理之外,再也没有官方的推荐。

但是,为你的应用打造一个架构是非常重要的。不管你是否喜欢,任何应用最终都会有一个架构。因此你最好是成为一个架构的奠基人,而不是等着它出现。


今天: Clean Architecture

目前的趋势是采用Uncle Bob在2012年对web应用提出的建议: Clean Architecture。

但是我发现Clean Architecture对于绝大多数安卓应用来说都有点过度设计了。

通常移动应用要比web应用的生命短。移动端技术的发展太快,以至于今天发行的app可能在一年后已经完全过时。

移动应用所做的事情很少。绝大多数的用例都只是数据信息流的消费。从API获取数据,显示数据给用户,很少有输入与写入。

所以它的业务逻辑并不复杂。至少不如后端一样的复杂。虽然你要处理很多平台上的问题:内存,存储,暂停,恢复,网络,定位等等,但是这些都不是业务逻辑。所有app都有这些东西。

因此,绝大多数app似乎都无法从类似于复杂的分层或者工作执行优先级队列中获益。

他们也许只是需要一种组织代码的简单方式,能高效的一起工作,更容易的发现bug。


Flux 架构介绍

Flux 架构 被Facebook使用来构建他们的客户端web应用。跟Clean Architecture一样,它不是为移动应用设计的,但是它的特性和简单可以让我们很好的在安卓项目中采用。

flux-graph-simple

要理解Flux,有两个关键的特点

  • 数据流总是单向的

    一个单向的数据流 是 Flux 架构的核心,也是它简单易学的原因。就如下面讨论的,在进行应用测试的时候,它提供了非常大的帮助。

  • 应用被分成三个主要部分:

    • View: 应用的界面。这里创建响应用户操作的action。

    • Dispatcher: 中心枢纽,传递所有的action,负责把它们运达每个Store。

    • Store: 维护一个特定application domain的状态。它们根据当前状态响应action,执行业务逻辑,同时在完成的时候发出一个change事件。这个事件用于view更新其界面。

这三个部分都是通过Action来通信的:一个简单的基本对象,以类型来区分,包含了和操作相关的数据。


Flux Android 架构

在安卓开发中使用Flux设计规范的目的是建立一个在简单性与易扩展易测试之间都比较平衡的架构。

第一步是找到Flux元素和安卓app组件之间的映射。

其中两个元素非常容易找到与实现。

  • View: Activity o或者Fragment

  • Dispatcher: 一个事件总线( event bus),在我的例子中将使用Otto,但是其它任何实现都应该是ok的。 

Actions

Actions也不复杂。它们的实现和POJO一样简单,有两个主要属性:

  • Type: 一个String,定义了事件的类型。

  • Data: 一个map,装载了本次操作。

比如,一个显示用户详情的典型action如下:

1
2
3
Bundle data =  new  Bundle(); 
data.put( "USER_ID" , id); 
Action action =  new  ViewAction( "SHOW_USER" , data);

Stores

这可能是Flux理论中最难的部分。

如果你之前使用过Clean Architecture,你可能难以接受。因为Stores承担了原本被分成多层的责任。

Stores包含了application的状态与它的业务逻辑。它们类似于rich data models但是可以管理多个对象的状态,而不仅仅是一个对象。

Stores响应Dispatcher发出的Action,执行业务逻辑并发送change事件。

Stores的唯一输出是这单一的事件:change。其它对Store内部状态感兴趣的组件必须监听这个事件,同时使用它获取需要的数据。

系统中不再需要任何其它组建去了解application的任何状态信息。

最后,stores必须对外公开一个获取application状态的接口。这样,view元素可以查询Stores然后相应的更新UI。

flux-graph-store

比如,在一个Pub Discovery App 中,SearchStore被用来跟踪被搜索的item,搜索结果以及搜索历史。在同一个应用中,一个ReviewedStore同样包含了浏览pub的列表以及必要的逻辑比如根据review排序。

但是有一个重要的概念需要记住:Stores并不是仓库。它们的职责不是从一个外部源(API或者数据库)获取数据,而是跟踪actions提供的数据。

那么,Flux application是如何获得数据的呢?

网络请求与异步调用

在第一幅Flux示意图中我有意跳过了一部分:网络调用。接下来的示意图完善第一幅图并添加了更多细节:



flux-graph-complete


异步网络调用是被一个Actions Creator触发的。一个Network 适配器完成相应API的异步调用并且返回结果给Actions Creator。

最终Actions Creator分发带有返回数据的相应类型的Action。

把所有网络工作和异步工作独立于Stores之外有两个主要的优点:


  • 你的Stores是完全同步的:这让Store中的逻辑更容易跟踪。Bug也更容易跟踪。同时,因为所有的状态变化都是同步的,那么Store的测试变会的非常简单:启动actions然后等待期望的结果。

  • 所有的action都是从一个Action Creator触发的:在一处单一的点创建与发起所有用户操作可以大大简化寻找错误的过程。忘掉在多个类中寻找某个操作的源头吧 ,所有的事情都是在这里发生的。同时,因为异步调用发生在这之前,所有来自于ActionCreator的东西都是同步的。这大大提高了代码的可跟踪与可测试性。


演示代码:To-Do应用

在这个例子中,你将看到一个使用Flux架构的典型的To-Do应用。

我让项目尽量简单,只演示这个架构如何能够产生组织良好的app。

对于实现的一些评价:

  • Dispatcher的实现是通过Otto Bus。但是几乎任何bus都是可以的。Flux架构本身在事件上有一定限制,我在这里没有采用。原本Flux的定义中,前一个事件没有完成之前就开始分发下一个事件是不允许的,会抛出一个异常。为了让项目简单,我没有采用。

  • 有一个ActionsCreator类帮助创建Action,并把它们post给Dispatcher。这在Flux中时相当普遍的模式,可以让事情变的有序。

  • Actions类型只是String常量。也许这不是最好的实现,但是它快速并且有助于事情的简单化。

同样的还有Actions数据:它们只是以String类型为key,Object为值的HashMap。这会导致Stores中转换成实际数据的时候发生丑陋的类型转换。而且显然这也不是类型安全的,但这也是为了让我们的例子更好理解。


总结

在安卓应用中其实不存在最佳架构的说法。不过存在适合你当前app的最佳架构。这个架构可以让你和团队其他成员协作起来更轻松,按时完成项目,尽可能的保持高质量与较少的bug。


我相信Flux对于以上提到的特点都有很好的支持。


源码

https://github.com/lgvalle/android-flux-todo-app


扩展阅读:


深入理解 MVC 与其他主流设计模式:架构精髓与实现方法详解 这些设计模式各有特点,适用于不同规模、复杂度和需求的应用。合理应用设计模式可以提高代码的复用性、可维护性和可扩展性。下个章节我们将实现设计模式提供代码参考。 阅读详情

相关推荐

flux_色温_汉化

flux_安卓手机版,不是电脑版。网上只有二个地方可以下载,更找不到汉化包,因此本人亲自汉化,喜欢的就下载吧。

AndroidFlux

AndroidFlux是Facebook的Flux 架构的Android实现。

NJUwzl的博客 468

Android学习之Flux架构入门

Flux 架构介绍 Flux 架构 被Facebook使用来构建他们的客户端web应用。跟Clean Architecture一样,它不是为移动应用设计的,但是它的特性和简单可以让我们很好的在安卓项目中采用。 Flux模式最大的特点是单向的数据流,它的UI状态更新模式继承了MVC模式的设计思想。Flux并不是具体的框架,而是一套处理UI问题的模式,Android Flux同样不是具体的框架,你不需要导入或者集成任何新的代码就可以使用,而你需要做的事情是了解这套思想、遵循这种开发模式,查看我们提供的Android代码示例,写自己的代码。 要理解Flux,有两个关键的特点 1、数据流总是单向的

我的Android重构之旅:架构篇

EF A舞蹈服 去年10月底来到了新公司,刚开始接手 Android 项目时,发现该项目真的是一团遭,项目开发上没有任何架构可言,开发人员连简单的 MVC、MVP 都不了解,Activity 及其臃肿,业务边界也不明确,因此我决定重新分析一下当前主流的几种开发架构,选出适合当前项目的架构形式。 这是“我的Android重构之旅”的开篇之章,在这一篇中,我将依次的和大家介绍一下 MVVM、MVP...

weixin_34054866的博客 486

Android逆向分析

Android 逆向开发是指对已发布的 Android 应用进行分析和破解,以了解应用程序的内部工作原理,获取应用程序的敏感信息,或者修改应用程序的行为。Android应用 Java编写的,利用Android SDK编译代码,并并且把所有的数据和资源文件打包成一个APK(Android Package)文件这是一个后缀名为.apk的压缩文件,apk文件中包含了一个Anddroid应用程序的所有内容,是Android平台用于安装应用程序的文件。

qq_51598534的博客 6293

微信小程序scroll-view,点击menu,滚动到锚点;滚动到锚点,激活menu。

首先看看效果图1、首先是点击菜单,滚动列表,这个实现比较简单。直接使用scroll-view 的 scroll-into-view属性,小程序文档。<view class='container'> <!-- 菜单 --> <view class='menu'> <ul> <!-- scrollList 修改cate --&g...

weixin_39834214的博客 1万+

Android中移植Flux框架

Flux架构初探 引用facebook官网的一段介绍: Flux is the application architecture that Facebook uses for building client-side web applications. It complements React’s composable view components by utilizing a uni...

lemon15588的博客 981

Python爬虫案例:从39问医生网爬取口腔科的在线问答记录(单轮问答)

本次实验爬取39问医生网中口腔科分类下的所有在线单轮问答记录,每页32条,共100页,总数据量为3200条,最终结果以excel格式保存。

JieBao11的博客 1641

Android开发之Flux架构

Android开发之Flux架构 什么是Flux? Flux是一种软件开发架构,开发流程遵循Restful的点对点的数据流向,降低代码之间的耦合性,使得代码之间的调用更加清晰,Flux开始是应用于前端的技术架构,只要解决前端中资源与调用者的唯一性,下面是Flux架构的核心思想: View view是代表展示给用户的界面,比如Activity或者Fragment。 Acti

luweicheng24的博客 721

COLMAP生成MVSNet数据集

COLMAP生成MVSNet数据集

qq_43307074的博客 5637

Stanford Dogs 犬类识别实战:基于 YOLOv8 的 120 类目标检测与图形界面实现

本项目通过YOLOv8实现了Stanford Dogs数据集的目标检测功能,完整包含了数据准备、模型训练、检测推理、图形界面四大模块。初学者使用YOLOv8n(nano版)加速训练,熟悉流程后可切换到YOLOv8s/m。图像上传与检测可进一步增强,例如显示识别框、标注标签。可以添加模型选择、检测阈值调整等功能,提升实用性。通过网盘分享的文件:基于yolov8的狗类品种识别系统链接: https://pan.baidu.com/s/1UYV4h2WnK1RxWWKoPrS-RA?

FJN110的博客 84

Android-AndroidFlux-异步请求和网络

AndroidFlux-异步请求和网络 在移动开发中,异步网络操作必不可少,本篇着重介绍在Flux模式中如何处理异步操作的问题,并深入一些细节,比如如何在异步操作时显示异步状态。另外,网络操作仅仅是异步操作的一种,最后扩展ActionCreator的语义来处理更多的业务逻辑。 如何做网络操作 如图所示,在FluxApp中,网络操作是在ActionCreator

wzgiceman 8915

Video Diffusion Models:基于扩散模型的视频生成

Diffusion Models专栏文章汇总:入门与实战 前言:扩散模型已经被广泛运用到图像生成、image-to-image转换、时间序列生成、3D点云生成、文本生成、音频生成等领域,谷歌研究院最新的研究成果成功将diffusion models运用到视频生成领域。 目录 模型结构 分解时空体系联合训练 梯度条件法 恐怖的实验结果 论文和代码 个人启发 个人疑问? 模型结构 在前面的博文中,我详细介绍了为什么绝大部分的diffusion models都使用Unet结构.

沉迷单车的追风少年 6671

Android架构文章合集(a collection of android Architecture)

本文主要是android目前流行架构的一些文章,本文转自简书,欢迎阅读。

Android_杜小菜_移动开发技术专栏 973

在zcu102开发板上使用PetaLinux运行Qt程序

请注意,上述步骤只是一个概述,并且可能需要根据特定的开发环境和要求进行适当的调整。如果你是一个初学者或者对于这些领域不太熟悉,建议在尝试之前阅读相关的文档和教程,或者寻求专业人士的帮助。在"Projects"菜单中,选择"Build & Run"选项,并在"Build"步骤中选择正确的工具链。注意:如果Qt程序依赖于其他库文件,需要将这些库文件一起复制到PetaLinux工程的根文件系统目录中,并在Qt程序中正确地配置库文件路径。如果一切顺利,PetaLinux系统将启动,并自动运行Qt程序。

UhxzCombined的博客 698

Qt C++ HTTP 调用通义千问大模型 X 学术论文润色工具(SCI 格式适配)

请求地址:`https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation`;| Windows | 打包时携带 `Qt6Network.dll`/`libcrypto-1_1-x64.dll` 等依赖;| Linux | 安装 `libssl-dev` 和 `libcurl4-openssl-dev`;| API 调用失败 | 检查 API-KEY 是否有效;

寒寒豆豆软件公司的博客 104

不容错过,最全的安卓架构合集【从零开始搭建android框架系列(2)】

不容错过,最全的安卓架构合集【从零开始搭建android框架系列(2)】 字数749 阅读16564 评论82 喜欢244 更多及时技术资讯,欢迎关注我的微博 :Anthony 安卓架构文章合集(a collection of android Architecture) 博客原地址: 简书博客 github地址: AndroidArchitec

it_yangkun的博客 465

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

不容错过,最全的安卓架构合集-(从零开始搭建android框架系列(2))

转载地址:http://blog.youkuaiyun.com/u014315849/article/details/51385346 目录(?)[-] 博客原地址github地址Android官方架构国内各大平台架构MVVM MVP MVCClean ArchitectureFlux其它请关注github更新 安卓架构文章合集(a collect

l_215851356的专栏 1776

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

最全的安卓架构合集

从零开始搭建android框架系列 github地址: AndroidArchitectureCollection github地址  请关注github,后续会在github上面更新 这是从各大平台上参考的android架构文章,文章数据,主要参考自Info,推荐关注:  1 Android官方架构: googlesamples/android-architecture(google官...

zhangbijun1230的专栏 406

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android架构文章集合

安卓架构文章合集(a collection of android Architecture) fork from :https://github.com/Juude/Awesome-Android-Architecture!!! 博客原地址: 简书博客 github地址: AndroidArchitectureCollection github地址 请关注github

梦想 坚持 自由 1070

Android - Flux架构

转载地址:http://blog.youkuaiyun.com/caroline_wendy/article/details/47783525 官网:http://androidflux.github.io/docs/overview.html#content

470

Android架构合集(文章整理,后续不断更新中)

博客原地址:http://www.jianshu.com/p/1f21e1d375aa 这是从各大平台上参考的android架构文章,主要参考自: Juude/Awesome-Android-Architecture 1 国内各大平台架构: App工程结构搭建:几种常见Android代码架构分析携程Mobile架构演化(视频)携程Android App插件化和动态加载实践陶钧谈淘宝

LightLu 1015

Android架构合集(请关注github,后续github上面会继续更新)

安卓架构文章合集(a collection of android Architecture) 博客原地址: 简书博客 github地址: AndroidArchitectureCollection github地址 请关注github,后续会在github上面更新 这是从各大平台上参考的android架构文章,文章数据,主要参考自Info,推荐关注: infoQ

chenhuakang的博客 988
上一篇: MVP Architecture on Android
下一篇: Android解耦库EventBus的使用和源码分析
Inconsolabl
博客等级 码龄15年 5粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值