Senior
Ar dirbote su Kotlin Multiplatform?
sobes.tech AI
Atsakymas iš AI
Taip, dirbau. Kūriau bendrą logiką iOS ir Android platformoms naudojant Kotlin Multiplatform Mobile (dabar Kotlin Multiplatform sudėtyje).
Naudojau Ktor tinklo užklausoms, SQLDelight duomenų bazės valdymui ir Koin priklausomybių valdymui.
Kūriau šiuos sluoksnius:
- Data Layer: Darbas su vietiniais duomenimis ir tinklu.
- Domain Layer: Verslo logika.
UI sluoksnis liko platformos priklausomas.
Pagrindiniai pranašumai, kuriuos išskyriau:
- Kodo pakartojimas: Žymiai sumažintas logikos dubliavimas.
- Vieningas kalba: Kotlin abiem platformoms.
- Interoperabilumas: Nativus sąveika su platformos kodu (Swift/Objective-C ir Java/Kotlin).
Taip pat išskyriau sunkumus:
- Ekosistemos brandumas: Kai kurios bibliotekos gali būti mažiau brandžios nei platformos specifiniuose stackuose.
- Derinimas: Kros-platforminio kodo derinimas gali būti mažiau paprastas.
- CI/CD: CI/CD pipeline konfigūracija reikalauja dėmesio KMP specifikai.
Pavyzdinis paprasto klasės pavyzdys:
// commonMain
expect class Platform() {
val name: String
}
// androidMain
actual class Platform actual constructor() {
actual val name: String = "Android ${android.os.Build.VERSION.SDK_INT}"
}
// iosMain
actual class Platform actual constructor() {
actual val name: String =
UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion
}
// commonMain
class Greeting {
private val platform: Platform = Platform()
fun greet(): String {
return "Hello, ${platform.name}!"
}
}
Šiame pavyzdyje Platform yra laukiamas (expect) klasė, kurios realizacija teikiama kiekvienoje platformoje (actual). Greeting naudoja šį klasę pasveikinimo formavimui.
KMP patirtis, nors ir nebuvo pagrindinis dėmesys, parodė galimybę pagreitinti kūrimą ir suvienodinti logiką kryžminiuose projektuose.