Совместное использование бизнес-логики
Повторно используйте код в iOS и Android
«Совместное использование бизнес-логики» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения 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)Общие варианты использования
Чистые бизнес-правила находятся в общем коде и не требуют программных интерфейсов платформы.
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 можно также совместно использовать логику представления и состояние, оставляя нативным только отображение.
Предоставление состояния как потока
Предоставляйте состояние с помощью 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 вызывает их с помощью async/await Swift.
// 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 для приостанавливаемых функций - Пользовательский интерфейс и навигацию оставляйте нативными
Далее: доступ к программным интерфейсам платформы.
Часто задаваемые вопросы
Урок «Совместное использование бизнес-логики» бесплатный?
Да — полный текст урока «Совместное использование бизнес-логики» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.
Чему я научусь в уроке «Совместное использование бизнес-логики»?
Повторно используйте код в iOS и Android Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Kotlin Academy?
Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Совместное использование бизнес-логики»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Kotlin Academy?
Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Структура проекта KMM
- expect и actual
- Совместное использование бизнес-логики
- API платформ