ロジックを共有し UI は native を利用する

2024/02/25に公開

手元でKotlin Multiplatformを動かせる環境を整えつつ、KoinでのDIパターンを調べました。
(十割方リンク集です。)

環境

  • macOS Sonoma 14.3.1(23D60)
  • Android Studio 2023.11.28
  • Xcode 15.2 (推奨環境ではありませんが動作確認も兼ねてこのパージョンにしました。)
  • JDK build 21.0.2+13-LTS-58

Kotlin Multiplatformのコードシェア範囲

  • Share logic and keep UI native

検証内容

  • KoinでのDIパターン

KoinでのDIパターン

  • ktor-kmm-sse
    ktorを利用する際に例として紹介されるリポジトリです。
    commonMainで用意したsharedModule(ktorを利用したクライアントの実装)をandroidMainとiosMainでDIしていました。

https://github.com/JurajBegovac/ktor-kmm-sse

  • BikeShare
    commonMainでViewModelを実装し、ViewModelをandroidのネイティブ実装とiosのネイティブ実装でDIしていました。
    (androidMainとiosMainではPlatformモジュールとしてcommonMainでまとめられてました。)

https://github.com/joreilly/BikeShare/tree/main

所感

環境構築にかなり時間を使いました。多くのリポジトリを読んだことでkoinを利用したDIの利点として、コードシェア範囲を柔軟に明確に決めることができると感じました。

後述のおまけについて
やはり「Share both logic and UI」の用途の方がリポジトリが多く、koinを利用したプロジェクトの例としてかなり参考になったので載せました。
ktorの利用としてServerのリポジトリも多くあり参考になったので載せました。

おまけ:Share both logic and UI

https://github.com/ismartcoding/plain-app
https://github.com/serbelga/Todometer-KMP
https://github.com/PatilShreyas/Foodium-KMM/tree/main
https://github.com/daniaviladomingo/kmm/tree/master

おまけ2:Koin and ktor Server use

https://github.com/crisunx/ktor-koin-sample-app
https://github.com/PoisonedYouth/ktor-koin
https://github.com/PatilShreyas/NotyKT

最後までお読みいただきありがとうございました。

Discussion