Я пытаюсь создать многоуровневый Validator
объект, который является достаточно общим.Идея в том, что у вас есть уровни проверки, если уровень 1 пройден, тогда вы делаете уровень 2 и т. Д., Но я борюсь с одной конкретной областью: создание вызова функции, но не выполнение его до более поздней точки.
Данные:
case class FooData(alpha: String, beta: String) extends AllData
case class BarData(gamma: Int, delta: Int) extends AllData
ValidationError:
case class ValidationError(code: String, message: String)
Validator:
object Validator {
def validate(validations: List[List[Validation]]): List[ValidationError] = {
validations match {
case head :: nil => // Execute the functions and get the results back
// Recursively work down the levels (below syntax may be incorrect)
case head :: tail => validate(head) ... // if no errors then validate(tail) etc.
...
}
}
}
Пример валидатора:
object CorrectNameFormatValidator extends Validation {
def validate(str: String): Seq[ValidationError] = {
...
}
}
Как я хочу использовать это:
object App {
def main(args: Array[String]): Unit = {
val fooData = FooData(alpha = "first", beta = "second")
val levelOneValidations = List(
CorrectNameFormatValidator(fooData.alpha),
CorrectNameFormatValidator(fooData.beta),
SomeOtherValidator(fooData.beta)
)
// I don't want these to execute as function calls here
val levelTwoValidations = List(
SomeLevelTwoValidator (fooData.alpha),
SomeLevelTwoValidator(fooData.beta),
SomeOtherLevelValidator(fooData.beta),
SomeOtherLevelValidator(fooData.alpha)
)
val validationLevels = List(levelOneValidations, levelTwoValidations)
Validator.validate(validationLevels)
}
}
Я делаю что-то действительно запутанное, когда мне не нужно или я просто пропускаю компонент?
По сути, я хочу определить, когда будет вызываться функция и с какими параметрами, но я не хочу, чтобы вызов происходил, пока я не скажу в Валидаторе.Это возможно?