2017-08-16 22 views
6

Kotlin veri sınıflarını kullanarak değer nesnelerini modelliyorsam, doğrulamayı gerçekleştirmenin en iyi yolu nedir? Init bloğu, birincil kurucudan sonra çalıştırıldığından beri tek mantıksal yer gibi görünüyor. JSR-303 ÖrnekDoğrulama Verileri Sınıf Parametreleri Kotlin

Bunun dezavantajı, bunun kullanılması

data class EmailAddress(val address: String) { 

    init { 
     if (address.isEmpty() || !address.matches(Regex("^[a-zA-Z0-9][email protected][a-zA-Z0-9]+(.[a-zA-Z]{2,})$"))) { 
      throw IllegalArgumentException("${address} is not a valid email address") 
     } 
    } 
} 

bu doğrulama veri sınıflarının bir sorumluluk değildir gibi

@Configurable 
data class EmailAddress(@Email val address: String) { 

    @Autowired 
    lateinit var validator: Validator 

    init { 
     validator.validate(this) 
    } 
} 
+0

bu tür çalışmak kesinlikle rahatsız olacak, ama ben sadece açık bir 'validate' yöntemi koymak ve Denetleyiciden onu arayın (örneğin, S tarafından doldurulmuş bir istek nesnesinin olması durumunda) '@ RequestBody' olarak önyükleme ve girişleri doğrulamak istiyorum. – Kevin

cevap

0

Aslında göründüğü dokuma yükleme süresini gerektirir. data kendisi için söyler - veri depolama için kullanılır. Eğer veri sınıfını doğrulamak isterseniz

  1. Yani, mükemmel anlamda yapıcı iddialarını @get: doğrulama ayarlamak ve inşaat sorumlusu sınıfta veri sınıfının dışında doğrulamak için yapacaktır. Eğer prototip ile bu sınıf Bean yapabilirsiniz -

  2. İkinci seçeneğiniz Spring Framework kullanırsanız sadece basit sınıfını kullanın ve,

  3. Ayrıca orada yapıcı geçen doğrulayıcıda bütün mantığını uygulamak, veri sınıfını kullanmak değildir kapsamı, ama şansı o spagetti-koduyla :) Ben her zaman ilk örneğe benzer bir şey yaptık