Aplikacja składa się z wielu formularzy, dodatkowo jest sporo komunikacji z innymi serwisami po REST i SOAP. Problemem są często białe znaki jak np. " "
Czy dobrym rozwiązaniem byłoby zdefiniować listę znaków (np. w propertisach), które są nieakceptowalne i je sprawdzać za każdym razem? Czy może jest jest jakaś biblioteka, która by to ogarniała?
masjav napisał(a):
Aplikacja składa się z wielu formularzy, dodatkowo jest sporo komunikacji z innymi serwisami po REST i SOAP. Problemem są często białe znaki jak np. " "
Czy dobrym rozwiązaniem byłoby zdefiniować listę znaków (np. w propertisach), które są nieakceptowalne i je sprawdzać za każdym razem? Czy może jest jest jakaś biblioteka, która by to ogarniała?
Dodanie biblioteki w takim miejscu to byłby bardzo średni pomysł, z uwagi na to że byłoby to znaczna i ścisła zależność Twojej apki.
Ja bym tego w ogóle nie robił na poziomie komunikacji (jak Rest czy SOAP), tylko po prostu rozparsowałbym żądania na modele biznesowe, i dopiero w nich umieścił odpowiednią walidacje.
Już jest, proszę:
interface ValidationRule<T, R> {
fun applyValidationRule(objectToValidate: T): R
}
class Validator<T, R>(private val rules: List<ValidationRule<T, R>>) {
fun applyRules(objectToValidate: T): List<R> {
return rules.map { it.applyValidationRule(objectToValidate) }.toList()
}
}
I jeszcze przykład użycia:
data class ValidationResponse(val correct: Boolean, val message: String)
class NoTrailingSpaces : ValidationRule<String, ValidationResponse> {
override fun applyValidationRule(objectToValidate: String): ValidationResponse {
if (objectToValidate.isEmpty()) return ValidationResponse(true, "Empty string")
if (objectToValidate.last() == ' ') return ValidationResponse(false, "String has empty space(s) at the end")
return ValidationResponse(true, "Everything OK")
}
}
fun main() {
val validator = Validator(listOf(NoTrailingSpaces()))
val stringToCheck = " String "
val validationResults = validator.applyRules(stringToCheck)
validationResults.map { it.message }.forEach{ println(it) }
}
Tworzysz sobie te klasy raz, możesz składać jak lubisz. Tak, wiem, da się funkcyjnie i ładniej.