Decompose

Decompose

Kotlin多平台组件化开发框架

Decompose是一个Kotlin多平台库,用于构建树状结构的生命周期感知组件。该库提供路由功能和可插拔UI,支持多种UI框架。Decompose实现了UI和业务逻辑的分离,提供导航状态管理、依赖注入等功能,适用于复杂的跨平台应用开发。它支持组件化开发,提高了代码的可测试性和可维护性。

DecomposeKotlin Multiplatform组件化跨平台开发导航功能Github开源项目
<picture> <source media="(prefers-color-scheme: light)" srcset="https://yellow-cdn.veclightyear.com/835a84d5/5790dc93-ba35-4af7-98e0-5b1c1b8797bc.png"> <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/arkivanov/Decompose/master/docs/media/logo/logo-titled-dark.png"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/5790dc93-ba35-4af7-98e0-5b1c1b8797bc.png" width="300"> </picture> <br/> <br/>

许可证 Twitter链接


Decompose是一个Kotlin多平台库,用于将代码分解为树状结构的生命周期感知业务逻辑组件(又称BLoC),具有路由功能和可插拔UI(Jetpack/Multiplatform Compose、Android Views、SwiftUI、Kotlin/React等)。

请查看项目网站获取文档和API。

如果您有任何问题或想法,可以在讨论部分进行交流。也欢迎加入Kotlin Slack频道 - #decompose

⚡⚡⚡ 所有的星标、问题、讨论、拉取请求等去哪了?

在Badoo/Bumble工作了5年后,我现在开始了另一个冒险。作为过渡的一部分,我被要求将这个仓库转移到Badoo GitHub账户

现在我以副本形式继续这个项目的工作。

这次转移不应该造成任何破坏性变化。大多数外部链接应该没有失效。仓库链接也保持不变:arkivanov/Decompose。如果您认为有什么地方损坏或不正常工作,请在这个仓库中提交问题。

以下是受转移影响最大的方面:

  • 所有星标都被转移了
  • 所有问题和讨论也被转移了。我会尽最大努力填补这里的空白。
  • 所有带有评论历史的拉取请求也都消失了。

我将继续为这个项目和社区尽我所能!一切照常进行!

其他资源:

为什么选择Decompose?

  • Decompose将代码分解成小而独立的组件,并将它们组织成树状结构。每个父组件只知道其直接子组件。
  • Decompose在UI和非UI代码之间划清界限,带来以下好处:
    • 更好的关注点分离
    • 可插拔的平台特定UI(Compose、SwiftUI、Kotlin/React等)
    • 业务逻辑代码可通过纯多平台单元测试进行测试
  • 导航状态完全暴露 - 可插入任何您想要的UI,使用您喜欢的UI框架API或预定义API进行动画处理。
  • 导航是从旧状态到新状态的纯函数 - 无限制导航。
  • 通过构造函数进行适当的依赖注入(DI)和控制反转(IoC),包括但不限于类型安全参数。
  • 共享导航逻辑
  • 生命周期感知组件
  • 后台栈中的组件不会被销毁,它们在后台继续工作,无需UI
  • 状态保存(在Android上自动,在其他目标上通过kotlinx-serialization手动保存)
  • 实例保留(又称ViewModels)以应对配置更改(主要适用于Android)

表情时间!

<img src="https://yellow-cdn.veclightyear.com/835a84d5/8aca0e03-7263-4b6f-aff5-2a4300b350fc.png" width="512">

设置

请查看文档的安装部分。

支持的平台

总的来说,Decompose支持以下目标:androidjvmioswatchostvosmacoswasmJsjs。然而,某些模块不支持所有目标,或者支持取决于Decompose的版本。详情请参阅安装文档。

概述

以下是该库的一些关键概念,更多细节可以在文档中找到。

  • 组件 - 每个组件代表一段具有自己生命周期的逻辑,UI是可选的,可从外部插入
  • ComponentContext - 每个组件都有自己的[ComponentContext],使组件具有生命周期感知能力,并允许状态保存、实例保留(类似于AndroidX的ViewModel)和返回按钮处理
  • 子堆栈 - 实现子组件之间的导航,也支持嵌套导航
  • 子槽 - 一次只允许一个子组件,或者没有
  • 子页面 - 一个子组件列表,有一个选定的组件(例如类似分页器的导航)
  • 通用导航 - 提供一种方法来创建自定义导航模型,当预定义模型都不适合您的需求时
  • 生命周期 - 提供一种方法在组件中监听生命周期事件
  • StateKeeper - 使组件在被销毁时能够保存状态或数据
  • InstanceKeeper - 在组件中保留实例(类似于AndroidX的ViewModel
  • BackPressedHandler - 提供一种方法来处理和拦截返回按钮按压

组件层次结构

<img src="https://yellow-cdn.veclightyear.com/835a84d5/e9319b33-9520-41fb-ac06-0e85e794e08f.png" width="512">

可插拔UI层次结构

<img src="https://yellow-cdn.veclightyear.com/835a84d5/9cb598bc-28e5-41a8-a357-37103cdd3f1f.png" width="512">

典型组件结构

<img src="https://yellow-cdn.veclightyear.com/835a84d5/f9882d19-70ca-4ef5-9821-c8421fcf8948.png" width="512">

快速开始

请参考文档的快速开始部分。

示例

查看文档的示例部分,了解每个示例的完整描述。

模板

查看模板仓库,它可以用来快速启动您的项目。

文章

作者

Twitter:@arkann1985

如果您喜欢这个项目,随时可以<a href="https://www.buymeacoffee.com/arkivanov" target="_blank"><img src="https://yellow-cdn.veclightyear.com/835a84d5/ea36e092-98fc-46e3-a3c2-6b9e0a4227dd.png" alt="给我买杯咖啡" height=32></a> ;-)

编辑推荐精选

Keevx

Keevx

AI数字人视频创作平台

Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。

即梦AI

即梦AI

一站式AI创作平台

提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作

扣子-AI办公

扣子-AI办公

AI办公助手,复杂任务高效处理

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

下拉加载更多