0Pricing
Kotlin Academy · Ders

Yansıma Tabanlı Doğrulama ve Eşleme

Ek açıklama güdümlü yansımayla basit bir doğrulayıcı veya nesne eşleyici oluşturun.

Yansıma Tabanlı Doğrulama ve Eşleme, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.

Bu Örüntü Hangi Sorunu Çözer

Yansıma tabanlı doğrulama, bir sınıfın özelliklerindeki ek açıklamaları çalışma zamanında okur ve doğrulama kurallarını otomatik olarak uygular — alan başına elle denetim gerekmez. Aynı teknik, nesneler ile veritabanı satırları arasında dönüşüm yapan ORM eşleyicilerine güç verir.

Validate Ek Açıklaması

Özellikleri hedefleyen ve çalışma zamanında korunan bir ek açıklama tanımlayın:

@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.PROPERTY)
annotation class Validate(
    val minLength: Int = 0,
    val maxLength: Int = Int.MAX_VALUE,
    val pattern: String = ""
)

Veri Sınıfına Ek Açıklama Uygulama

@Validate ek açıklamasını veri sınıfı özelliklerine uygulayın. Doğrulayıcı, çalışma zamanında bunları tarayacaktır:

data class UserForm(
    @Validate(minLength = 2, maxLength = 50) val name: String,
    @Validate(pattern = "^[\\w.]+@[\\w]+\\.[a-z]{2,}$") val email: String,
    @Validate(minLength = 8) val password: String
)

Doğrulayıcı İşlevi

Özellikler üzerinde yinelemek, ek açıklamaları bulmak ve hataları toplamak için KClass.declaredMemberProperties kullanın:

fun validate(obj: Any): List<String> {
    val errors = mutableListOf<String>()
    for (prop in obj::class.declaredMemberProperties) {
        val ann = prop.findAnnotation<Validate>() ?: continue
        val value = (prop as KProperty1<Any, *>).get(obj)?.toString() ?: ""
        if (value.length < ann.minLength) errors += "${prop.name}: too short"
        if (value.length > ann.maxLength) errors += "${prop.name}: too long"
        if (ann.pattern.isNotEmpty() && !value.matches(Regex(ann.pattern)))
            errors += "${prop.name}: invalid format"
    }
    return errors
}

Doğrulayıcıyı Çalıştırma

validate() işlevini, ek açıklama uygulanmış herhangi bir nesneyle çağırın. İşlev, hata iletilerinden oluşan bir liste döndürür; boş liste, nesnenin geçerli olduğu anlamına gelir:

val form = UserForm("A", "not-an-email", "short")
val errors = validate(form)
errors.forEach(::println)
// name: too short
// email: invalid format
// password: too short

@Column ile Nesneden Haritaya Eşleme

Başka bir yansıma deseni, sütun adlarını sağlamak için @Column ek açıklamasını kullanarak bir nesneyi Map türünde bir haritaya eşler:

@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.PROPERTY)
annotation class Column(val name: String)

fun toMap(obj: Any): Map<String, Any?> =
    obj::class.declaredMemberProperties
        .mapNotNull { prop ->
            val col = prop.findAnnotation<Column>() ?: return@mapNotNull null
            col.name to (prop as KProperty1<Any, *>).get(obj)
        }.toMap()

Eşleyiciyi Kullanma

Veri sınıfına ek açıklama uygulayın ve bir INSERT deyimi için hazır, sütun anahtarlı bir harita elde etmek üzere toMap() işlevini çağırın:

data class User(
    @Column("user_name") val name: String,
    @Column("user_email") val email: String
)

val user = User("Alice", "alice@example.com")
println(toMap(user))
// {user_name=Alice, user_email=alice@example.com}

Yansıma Sonuçlarını Önbelleğe Alma

Yansıma taramaları maliyetlidir. Özellik ile ek açıklama eşlemesini başlangıçta, anahtarı KClass olan bir ConcurrentHashMap kullanarak önbelleğe alın:

val cache = ConcurrentHashMap<KClass<*>, List<Pair<KProperty1<Any,*>, Column>>>()

fun columnsOf(klass: KClass<*>) = cache.getOrPut(klass) {
    klass.declaredMemberProperties
        .mapNotNull { p ->
            p.findAnnotation<Column>()?.let { (p as KProperty1<Any,*>) to it }
        }
}

Doğrulama ve Eşlemeyi Birleştirme

Tek bir özelliğe birden fazla ek açıklama ekleyebilir ve her birini bağımsız olarak işleyebilirsiniz. Önce doğrulayıp sonra eşleyebilir veya her ek açıklama türünü toplayarak ikisini tek geçişte yapabilirsiniz:

data class Product(
    @Validate(minLength = 1) @Column("product_name") val name: String,
    @Column("price") val price: Double
)

Sınırlamalar

Yansıma tabanlı doğrulama güçlüdür ancak bazı ödünleri vardır: çalışma zamanı ek yükü getirir, ek açıklamaların saklanmasına dayanır ve hataları derleme zamanında yakalayamaz. Performans açısından kritik veya derleme zamanında güvenli doğrulama için bunun yerine KSP tarafından oluşturulan kodu değerlendirin.

Bu Desen Ne Zaman Kullanılmalı

Yansıma tabanlı doğrulama, rastgele kullanıcı tanımlı sınıfları işlemek zorunda olan çerçeve kodlarında çok etkilidir: ORM'ler, serileştiriciler, form doğrulayıcıları ve yapılandırma bağlayıcıları. Türlerinin sahibi olan uygulama kodu, hız ve açıklık için açık doğrulamayı tercih etmelidir.

Kısa Kontrol

Bir doğrulama ek açıklamasının çalışma zamanında okunabilmesi için hangi ek açıklama saklama politikası gereklidir?

Özet: Yansıma Tabanlı Doğrulama ve Eşleme

Önemli çıkarımlar:

  • Özellikleri hedefleyen ve çalışma zamanında korunan ek açıklamalar bildirin
  • Doğrulama veya eşlemeyi yönlendirmek için declaredMemberProperties + findAnnotation kullanın
  • Yansıma ek yükünü tekrarlamamak için sonuçları KClass başına önbelleğe alın
  • Birleşik davranış için bir özelliğe birden fazla ek açıklama ekleyin
  • Performans açısından kritik yollarda derleme zamanı alternatifleri için KSP'yi değerlendirin

Sıkça Sorulan Sorular

“Yansıma Tabanlı Doğrulama ve Eşleme” dersi ücretsiz mi?

Evet — “Yansıma Tabanlı Doğrulama ve Eşleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.

“Yansıma Tabanlı Doğrulama ve Eşleme” dersinde ne öğreneceğim?

Ek açıklama güdümlü yansımayla basit bir doğrulayıcı veya nesne eşleyici oluşturun. Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Yansıma Tabanlı Doğrulama ve Eşleme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Kotlin Yansıması: KClass, KFunction, KProperty
  2. Özel Ek Açıklamalar Oluşturma ve Hedefleme
  3. Çalışma Zamanında Ek Açıklamaları Okuma
  4. Yansıma Tabanlı Doğrulama ve Eşleme
← Kotlin Academy Sayfasına Dön