Bevor Daten verarbeitet werden müssen sie oft validiert werden. Besonders an den Grenzen unserer Domain wollen überpüfen, ob die gelieferten Daten fachlich korrekt sind z.B. beim Import eines CSV Files.
Anfangs ist die Logik noch sehr einfach. Oft ändern sich die fachlichen Anforderungen oder die Daten verändern sich. Der Code verrottet bevor man sich versieht und plötzlich sind alle guten Clean Code Vorsätze egal.
- neue Columns
- Änderungen in der Reihenfolge der Columns
- Änderungen/Fehler in Validierung
- Mehrere Validierungen für ein Feld
- bottom up refactoring
- top down
- mixed?
- Liste von commands
- Liste von Specifications
- Monade
- Composite Pattern
- Template Method
- Vavr Validation Framework?
- Entferne die Primitve Obsession im API
// v1
List<ErrorInfo> errors = new ValidatorCollector()
.validate(t -> Validators::validFirstName, "first name must contain characters", columns.get(0))
.validate(t -> Validators::validLastName, "last name must contain characters", columns.get(1))
.validate(t -> Validators::validXYZ, "last name must contain characters", columns.get(4))
.errors();
// v2
List<ValidationSpec> specs = List.of(
new ValidationSpec(t -> Validators::validFirstName, "first name must contain characters", columns.get(0))
new ValidationSpec(t -> Validators::validXYZ, "last name must contain characters", columns.get(4))
);
List<ErrorInfo> errors = specs.stream.flatMap(ValidationSpec::valdiate).collect(....);