0Pricing
Kotlin Academy · 课时

共享业务逻辑

在 iOS 和 Android 之间复用

共享业务逻辑 是 CoddyKit 上的免费 Kotlin Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Kotlin Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Kotlin Academy 课程共包含 4 节课。

为什么要共享业务逻辑

用户界面因平台而异,但验证、定价和数据流等规则是相同的。将它们放在 commonMain 中共享,可以消除重复代码和错误。

共享数据模型

在公共代码中只需定义一次领域模型。借助 kotlinx.serialization,它们还可以在两个平台上以相同方式序列化。

import kotlinx.serialization.Serializable

@Serializable
data class Product(val id: Int, val name: String, val price: Double)

共享用例

纯业务规则位于公共代码中,不需要任何平台 API。

class CartTotal {
    fun total(items: List<Product>): Double =
        items.sumOf { it.price }
}

使用 Ktor 共享网络通信

Ktor 客户端支持多平台。您只需编写一次 API 层;每个平台分别提供一个 HTTP 引擎。

import io.ktor.client.HttpClient

class Api(private val client: HttpClient) {
    // suspend fun products(): List<Product> = client.get(...)
}

共享协程

协程可以在公共代码中运行,因此异步仓储也可以共享。挂起函数会向两个平台公开。

class Repository(private val api: Api) {
    suspend fun load(): List<Product> = api.products()
}

仓储模式

一种常见模式是:Repository 协调网络和缓存,并提供简洁的方法。两个应用都调用同一个仓储。

共享 ViewModels

借助 Decompose 或共享的 ViewModel 等库,表示层逻辑和状态也可以共享,只保留原生渲染。

将状态公开为 Flow

使用 StateFlow 公开状态,这样 Android 可以直接收集状态,而 iOS 可以通过包装器观察状态。

import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow

class ProductState {
    private val _items = MutableStateFlow<List<Product>>(emptyList())
    val items: StateFlow<List<Product>> = _items
}

挂起函数与 iOS

Kotlin 挂起函数会以完成处理程序或异步方法的形式向 Swift 公开。iOS 使用 Swift 的 async/await 调用它们。

// Swift
// let products = try await repository.load()

不要在共享代码中放置用户界面

请避免共享用户界面。共享逻辑并进行原生渲染,可以在消除重复规则的同时提供最佳用户体验。

可运行的逻辑示例

共享用例就是普通的 Kotlin 代码。下面让它独立运行来计算购物车总额。

data class Product(val name: String, val price: Double)

fun total(items: List<Product>): Double = items.sumOf { it.price }

fun main() {
    val cart = listOf(Product("Pen", 2.5), Product("Book", 12.0))
    println("Total: " + total(cart))
}

快速检查

在结构良好的 KMM 应用中,哪些内容最适合共享,哪些内容应保留为原生实现?

回顾

您可以共享逻辑层:

  • 模型、用例、仓储、Ktor 网络通信和协程
  • 通过 StateFlow 公开状态;iOS 使用 async/await 调用挂起函数
  • 将用户界面和导航保留为原生实现

下一步:访问平台 API。

常见问题解答

「共享业务逻辑」课时是免费的吗?

是的 — 「共享业务逻辑」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Kotlin Academy 课程的其余内容,请升级到 CoddyKit PRO。 Kotlin Academy 课程共包含 4 节课。

「共享业务逻辑」这节课中我会学到什么?

在 iOS 和 Android 之间复用 你通过在浏览器中直接运行的动手代码来练习 Kotlin Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Kotlin Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Kotlin Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「共享业务逻辑」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Kotlin Academy 课中编写并运行代码吗?

能。每节 Kotlin Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. KMM 项目结构
  2. expect 与 actual
  3. 共享业务逻辑
  4. 平台 API
← 返回 Kotlin Academy