什么是 MVIKotlin

什么是 MVI

MVI 代表模型-视图-意图。它是一种利用单向数据流的架构模式。数据仅在一个方向之间循环- from toModel和from to 。ViewModelViewViewModel

什么是 MVIKotlin

MVIKotlin 是一个 Kotlin 多平台框架,它提供了一种(不仅)使用 MVI 模式编写共享代码的方法。它还包括强大的调试工具,如日志记录和时间旅行。该框架的主要功能不依赖于任何反应式或协程库。Reaktive 和Coroutines库的扩展作为单独的模块提供。

职责和架构

MVIKotlin 不带来或强制执行任何特定架构。图书馆的一项主要职责是:

  • State. 范围没有定义,它可以是整个应用程序、屏幕、功能或功能的一部分。

还有两个可选的职责,图书馆可以为您处理:

  • 为具有高效更新(差异)的 UI 提供抽象。
  • 在输入和输出之间提供生命周期感知连接(绑定)。

其他一切都超出了库的范围,没有“屏幕”、“功能”、“模块”等的定义。此外,没有强制/公开特定的反应框架。这提供了很大的灵活性:

  • MVIKotlin 可以逐步引入(例如,您可以在一个小功能中开始使用它,然后逐渐扩展);
  • 您可以使用/试验不同的架构、方法和/或库,用于导航、UI、模块化等;
  • 使用你喜欢的任何响应式框架,或者根本不使用它。

如果您正在使用声明性 UI 框架(如Jetpack ComposeJetBrains 的 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– 提供状态保存StateKeeperInstanceKeeper对象保留的 API(已弃用,请参阅文档
  • rx– 一个对 rx 和协程(多平台)进行抽象的小模块

将所需模块添加到模块的 build.gradle 文件中:

implementation "com.arkivanov.mvikotlin:<module-name>:<version>"

IDEA 实时模板

为了加快新商店的创建,您可以使用以下IDEA Live Templates

特征

  • 多平台:Android、JVM、JavaScript、iosX64、iosArm64、macosX64、linuxX64
  • 不依赖于任何反应库或协程
  • Reaktive库的扩展
  • 协程的扩展
  • 多线程友好(如果需要,可在 Kotlin Native 中冻结)
  • 输入和输出之间的生命周期感知连接(绑定)
  • 具有可定制记录器和格式化程序的记录功能
  • 时间旅行功能:
    • 适用于所有受支持目标的多平台
    • 适用于 Android 的即插即用 UI
    • 适用于 iOS 的即插即用 UI(从示例应用程序复制粘贴)
    • Android 的导出/导入事件
    • 适用于 Android 应用的IntelliJ IDEA 和 Android Studio插件
    • 适用于 Android、Java 和原生 Apple(iOS、watchOS、tvOS、macOS)应用程序的桌面客户端应用程序
    • 适用于 Web 浏览器应用的Chrome DevTools扩展

文档

https://arkivanov.github.io/MVKotlin

示例项目

示例项目是一个带有详细信息视图的待办事项列表。同一个示例有两种实现,一种使用 Reaktive 库,另一种使用协程。每个变体都有 Android、iOS 和 Web 浏览器应用程序。该示例还演示了多平台项目的一种可能架构 – 每个屏幕由一个控制器类表示,平台应用程序集成控制器并在它们之间导航。

结构

JetBrains/compose-jb 中的 TodoApp 示例

存储库中还有另一个示例项目JetBrains/compose-jb– TodoApp。它使用 MVIKotlin 进行业务逻辑和Decompose进行导航。

作者

推特:@arkann1985

https://github.com/arkivanov/MVIKotlin