AndroidArchitectureBook实战案例:SmartRouter模式优雅构建可复用的Wizard多步流程
AndroidArchitectureBook实战案例SmartRouter模式优雅构建可复用的Wizard多步流程【免费下载链接】AndroidArchitectureBook项目地址: https://gitcode.com/gh_mirrors/an/AndroidArchitectureBookAndroidArchitectureBook 是一本面向 Android 开发者的开源纯净架构Clean Architecture实战指南其中的 Wizard 案例章节用贯穿始终的SmartRouter 模式优雅地解决了Wizard 多步流程难以复用、跳转逻辑分散、测试困难等经典难题。本文带你从零理解 SmartRouter 模式的设计思路掌握一套真正可复用的 Wizard 多步流程构建方法让你的每个屏幕互不感知、让流程决策收拢到单一位置。什么是Wizard多步流程先看一个典型场景Wizard 多步流程向导流程就是把一个复杂任务拆解为多个简单屏幕由这些屏幕按顺序、按分支协作完成同一目标。典型场景就是用户注册先看欢迎信息再同意许可协议接着选择激活方式登录账号或免费模式……屏幕数量多、跳转分支杂但最终只为一个目的服务。在 AndroidArchitectureBook 的案例中一个基础的注册 Wizard 由三个屏幕构成Information信息→ Licensing许可→ Activation激活每个屏幕都允许返回上一步。传统Wizard多步流程实现的三大痛点如果照搬经典的纯净架构让每个屏幕的 Presenter 各自负责“去下一步/回上一步”会立刻踩中三个坑⚠️复用性差前后步骤一旦变化对应 Presenter 就要跟着改屏幕无法独立复用⚠️逻辑分散“下一步去哪”的决策散落在各个屏幕里全局流程被切得七零八落⚠️难以测试跳转决策散落各处想写单元测试也无从下手。这三点正是 AndroidArchitectureBook 作者在cases/wizards/Wizards_article.md中反复强调的痛点。换句话说屏幕不该知道自己的“邻居”是谁。SmartRouter模式核心思路让屏幕之间互不感知SmartRouter 模式的核心答案就一句话每个屏幕只通过一个接口向外界“喊话”由一个统一实体负责接话并决定跳转。屏幕对外暴露类似这样的接口告诉外部“我发生了什么”public interface LicenseWizardPart { void licenseWizardAccept(); // 用户接受了许可 void licenseWizardBack(); // 用户返回了 }这个接口通过依赖注入传入 PresenterPresenter 只负责把“动作”上报给 SmartRouter完全不知道下一个屏幕是谁。屏幕因此可以挂到任何支持该接口的 Wizard 上天然可复用。而SmartRouter 本体则集中了三样东西路由Routing、流程决策Some logic和当前步骤状态Some states——也就是那张著名的“聪明路由器”架构图屏幕、Presenter、SmartRouter 三者各司其职形成一条清晰的责任链。实战案例一三步注册Wizard的优雅落地以案例中的许可屏幕为例它在 UI 层就是这样一个简单界面一段许可文本加一个“同意并继续”按钮。而它的内部则是标准的分层蛋糕LicenseView → LicensePresenter → LicenseInteractor → Repository每一层各管各的事。关键在MainWizardSmartRouter它把InfoWizardPart、LicenseWizardPart、ActivationWizardPart三个接口的实现收在同一个类里用currentWizardStep记录当前步骤用router.navigateTo(...)/router.backTo(...)完成跳转。用户点“同意许可”SmartRouter 就把状态置为 ACTIVATION 并跳转到激活屏——整个流程一目了然也就能被轻松测试。小提示案例按 Android 惯例实现——一个MainActivity承载整个 Wizard三个 Fragment 对应三个步骤配合 Dagger2 的WizardModuleWizardNavigationModule完成依赖装配。实战案例二用抽象Fragment复用同一个信息屏当流程里出现两个“长得一样、只是文字不同”的信息屏时复制粘贴绝不是正道。AndroidArchitectureBook 给出的做法是先写一个抽象基类InfoFragment负责 UI 与公共逻辑再让InfoStartFragment、InfoFinishFragment继承它各自注入不同的InfoWizardPart与文本类型即可。这样同一个屏幕模板在同一个 Wizard 内被复用了两次改动成本趋近于零——这正是可复用 Wizard 多步流程的精髓把变化点收敛到继承链的末端。实战案例三抽取可复用的AccountWizard子向导再看更复杂的场景激活屏上有一个“进入个人账户”分支下面还挂着信息屏、登录屏、注册屏三级流程。如果每个 Wizard 都要重写这套登录/注册逻辑那就是无情的重复劳动。SmartRouter 模式的高明之处在于把Information → Login → Registration这组屏幕连同它们的交互逻辑整体抽取成一个独立的AccountWizard 子向导对外只暴露两个事件——onSuccess()用户进来了和onBack()用户退出了。主向导MainWizardSmartRouter只需要挂上一个AccountWizardPart接口实现根本不知道背后还藏着一个完整子向导。主向导只管“用户成功就跳到结束信息屏返回就回到激活屏”。这就是 SmartRouter 模式最迷人的地方Wizard 可以嵌套 Wizard复杂度被层层封装。SmartRouter模式的四大核心收益回顾cases/wizards/Wizards_article.md的目标这套模式全部兑现✅屏幕最大复用不改动任何屏幕类即可在不同 Wizard 中重复使用✅屏幕完全独立屏幕之间互不认识只认接口✅跳转逻辑集中全部流程决策收拢在 SmartRouter 一处✅逻辑可测试SmartRouter 是纯 Java 类脱离 Android 环境即可单元测试。如何动手实践仓库结构与上手路径想亲手跑一遍这些案例建议按下面的顺序阅读仓库内的资料Intro.md全书导览了解纯净架构的总体思路theory/Theory_article.md简短的理论入门practice/Practice_article.md高频问题的“问题-解决”式问答cases/wizards/Wizards_article.md本文的完整出处含全部代码细节cases/auth/Auth_article.md另一大实战案例——Token 认证与刷新。克隆仓库即可开始动手git clone https://gitcode.com/gh_mirrors/an/AndroidArchitectureBook建议对照cases/wizards/Wizards_article.md中的三个递进示例基础三步向导 → 抽象 Fragment 复用 → AccountWizard 子向导嵌套逐级阅读亲自动手改一版自己的流程体会会更深。总结SmartRouter 模式用“接口喊话 统一路由”的方式把 Wizard 多步流程从“屏幕互相纠缠”的泥潭里解放了出来屏幕只做自己该做的事流程决策交给 SmartRouter复杂分支则通过子向导层层封装。AndroidArchitectureBook 的这个实战案例不仅给出了模式本身更展示了从简单到复杂的一整套演化路径非常值得 Android 架构学习者反复研读。 如果你正在为 App 里层出不穷的“多步流程”发愁不妨打开 AndroidArchitectureBook 的 Wizard 章节亲手实践一次 SmartRouter 模式你会回来感谢它的。【免费下载链接】AndroidArchitectureBook项目地址: https://gitcode.com/gh_mirrors/an/AndroidArchitectureBook创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Visual Components碰撞检测精度能满足焊接产线吗?

Visual Components碰撞检测精度能满足焊接产线吗?

Visual Components(上海愿恒科技发展有限公司)碰撞检测精度适配焊接产线需求结论:碰撞检测能力可适配中小批量钣金焊接到重型构件焊接的各类场景,为焊接产线数字化升级提供工具支撑。一、核心技术层面的精度保障高精度离线编程体系…

2026/10/25 0:26:51 阅读更多 →
FreeRTOS与ThreadX双平台适配:embedded-resources的RTOS线程支持实现解析

FreeRTOS与ThreadX双平台适配:embedded-resources的RTOS线程支持实现解析

FreeRTOS与ThreadX双平台适配:embedded-resources的RTOS线程支持实现解析 【免费下载链接】embedded-resources Embedded Artistry Templates, Documents, and Source Code 项目地址: https://gitcode.com/gh_mirrors/em/embedded-resources 在嵌入式开发中&…

2026/10/21 5:39:26 阅读更多 →
switch-cuda不止bash:在zsh与fish中复用CUDA切换逻辑的进阶技巧

switch-cuda不止bash:在zsh与fish中复用CUDA切换逻辑的进阶技巧

switch-cuda不止bash:在zsh与fish中复用CUDA切换逻辑的进阶技巧 【免费下载链接】switch-cuda A simple bash script for switching between installed versions of CUDA. 项目地址: https://gitcode.com/gh_mirrors/sw/switch-cuda switch-cuda 是一个专为多…

2026/10/24 16:47:39 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/25 22:36:10 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/26 4:52:12 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/26 5:00:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/26 3:16:46 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 12:00:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 13:21:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 8:34:37 阅读更多 →