Sobes.tech
Senior

Έχετε εργαστεί με Kotlin Multiplatform;

sobes.tech AI

Απάντηση από AI

Ναι, εργάστηκα πάνω σε αυτό. Δημιούργησα μια κοινή λογική για iOS και Android χρησιμοποιώντας το Kotlin Multiplatform Mobile (τώρα μέρος του Kotlin Multiplatform).

Χρησιμοποίησα το Ktor για αιτήματα δικτύου, το SQLDelight για εργασία με βάσεις δεδομένων και το Koin για διαχείριση εξαρτήσεων.

Ανάπτυξα τα ακόλουθα στρώματα:

  • Στρώμα Δεδομένων: Εργασία με τοπικά δεδομένα και δίκτυο.
  • Στρώμα Τομέα: Επιχειρηματική λογική.

Το στρώμα UI παρέμεινε εξαρτώμενο από την πλατφόρμα.

Τα κύρια πλεονεκτήματα που τόνισα:

  • Επανάχρηση κώδικα: Σημαντική μείωση της διπλοτυπίας λογικής.
  • Ενιαίος γλώσσα: Kotlin και για τις δύο πλατφόρμες.
  • Αλληλεπίδραση με το native: Νativa αλληλεπίδραση με τον κώδικα της πλατφόρμας (Swift/Objective-C και Java/Kotlin).

Επίσης, τόνισα ορισμένες δυσκολίες:

  • Ωριμότητα οικοσυστήματος: Ορισμένες βιβλιοθήκες μπορεί να είναι λιγότερο ώριμες σε σύγκριση με πλατφόρμα-ειδικά stacks.
  • Αποσφαλμάτωση: Η αποσφαλμάτωση κώδικα πολλαπλών πλατφορμών μπορεί να είναι λιγότερο διαισθητική.
  • CI/CD: Η ρύθμιση pipelines CI/CD απαιτεί προσοχή στις ιδιαιτερότητες του KMP.

Εδώ ένα παράδειγμα μιας απλής κλάσης από ένα κοινό module:

// 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}!"
    }
}

Σε αυτό το παράδειγμα, το Platform είναι μια αναμενόμενη (expect) κλάση, της οποίας η υλοποίηση παρέχεται σε κάθε πλατφόρμα (actual). Το Greeting χρησιμοποιεί αυτήν την κλάση για να δημιουργήσει ένα χαιρετισμό.

Η εμπειρία με το KMP, αν και δεν ήταν ο κύριος στόχος, έδειξε το δυναμικό για επιτάχυνση της ανάπτυξης και ενοποίηση της λογικής σε πολυπλατφορμικά έργα.