什么是 MVI
MVI 代表模型-视图-意图。它是一种利用单向数据流的架构模式。数据仅在一个方向之间循环- from toModel
和from to 。View
Model
View
View
Model
什么是 MVIKotlin
MVIKotlin 是一个 Kotlin 多平台框架,它提供了一种(不仅)使用 MVI 模式编写共享代码的方法。它还包括强大的调试工具,如日志记录和时间旅行。该框架的主要功能不依赖于任何反应式或协程库。Reaktive 和Coroutines库的扩展作为单独的模块提供。
职责和架构
MVIKotlin 不带来或强制执行任何特定架构。图书馆的一项主要职责是:
- 为
State
. 范围没有定义,它可以是整个应用程序、屏幕、功能或功能的一部分。
还有两个可选的职责,图书馆可以为您处理:
- 为具有高效更新(差异)的 UI 提供抽象。
- 在输入和输出之间提供生命周期感知连接(绑定)。
其他一切都超出了库的范围,没有“屏幕”、“功能”、“模块”等的定义。此外,没有强制/公开特定的反应框架。这提供了很大的灵活性:
- MVIKotlin 可以逐步引入(例如,您可以在一个小功能中开始使用它,然后逐渐扩展);
- 您可以使用/试验不同的架构、方法和/或库,用于导航、UI、模块化等;
- 使用你喜欢的任何响应式框架,或者根本不使用它。
如果您正在使用声明性 UI 框架(如Jetpack Compose、JetBrains 的 Multiplatform Compose、SwiftUI、React 等),那么请考虑将Decompose用于架构。MVIKotlin 与 Decompose 配合得很好—— compose-jb/todoapp就是一个很好的例子。
在示例中还可以找到其中一种架构方法。
设置
推荐的最低 Gradle 版本为 5.3。请先阅读有关 元数据发布模式的文档。
有许多模块发布到 Maven Central:
mvikotlin
– 核心接口和功能(多平台)mvikotlin-main
– 具有默认实现的主模块Store
(多平台)mvikotlin-logging
– 日志记录功能(多平台)mvikotlin-timetravel
– 时间旅行功能(多平台)mvikotlin-extensions-reaktive
– 为 Reaktive 库(多平台)设置的扩展mvikotlin-extensions-coroutines
– 为协程设置的扩展(多平台)(已弃用,请参阅文档)keepers
– 提供状态保存StateKeeper
和InstanceKeeper
对象保留的 APIrx
– 一个对 rx 和协程(多平台)进行抽象的小模块
将所需模块添加到模块的 build.gradle 文件中:
implementation "com.arkivanov.mvikotlin:<module-name>:<version>"
IDEA 实时模板
为了加快新商店的创建,您可以使用以下IDEA Live Templates。
特征
- 多平台:Android、JVM、JavaScript、iosX64、iosArm64、macosX64、linuxX64
- 不依赖于任何反应库或协程
- Reaktive库的扩展
- 协程的扩展
- 多线程友好(如果需要,可在 Kotlin Native 中冻结)
- 输入和输出之间的生命周期感知连接(绑定)
- 具有可定制记录器和格式化程序的记录功能
- 时间旅行功能:
文档
https://arkivanov.github.io/MVKotlin
示例项目
示例项目是一个带有详细信息视图的待办事项列表。同一个示例有两种实现,一种使用 Reaktive 库,另一种使用协程。每个变体都有 Android、iOS 和 Web 浏览器应用程序。该示例还演示了多平台项目的一种可能架构 – 每个屏幕由一个控制器类表示,平台应用程序集成控制器并在它们之间导航。
结构
- 共享数据库 –样本/数据库
- 反应样品 –样品/反应样品
- 共享模块 – sample/reaktive/shared
- Android 应用程序 –示例/reaktive/app-android
- iOS Xcode 项目 –示例/reaktive/app-ios
- Web 浏览器应用程序 –示例/reaktive/app-js
- 协程示例 –示例/协程
- 共享模块 –示例/协程/共享
- Android 应用程序 –示例/协程/app-android
- iOS Xcode 项目 –示例/协程/app-ios
- Web 浏览器应用程序 – sample/coroutines/app-js
JetBrains/compose-jb 中的 TodoApp 示例
存储库中还有另一个示例项目JetBrains/compose-jb
– TodoApp。它使用 MVIKotlin 进行业务逻辑和Decompose进行导航。
作者
推特:@arkann1985
https://github.com/arkivanov/MVIKotlin