Ich bin in der Entwurfsphase eines Projekts, das bestimmte Validierungen für ein bestimmtes Objekt durchführen muss. Die Validierungen können in 5 verschiedene Gruppen eingeteilt werden. Jede einzelne Validierungskategorie kann mehrere Versionen aufweisen, die sich in ihren Implementierungen geringfügig unterscheiden.Verschiedene Validatoren basierend auf Eingabe
public interface Validator {
boolean validate(Object o);
}
public abstract CostValidator implements Validator {
//common logic related to cost validator
}
public class CostValidator1 extends CostValidator {
boolean validate(Object o) {
//implementation 1
}
public class CostValidator2 extends CostValidator {
boolean validator(Object o) {
//implementation 2
}
Basierend auf der Geschäftsgruppe des Objekts muss entweder CostValidator1 oder CostValidator2 ausgeführt werden.
Für jede Unternehmensgruppe, plane ich in einem Konfigurationssystem, dh eine Liste solcher Validierer auf die Aufrechterhaltung:
BusinessGroupA {
validators = [CostValidator1, SomeOtherValidator2...]
}
BusinessGroupB {
validators = [CostValidator2, AnotherValidator99...]
}
Der Verarbeitungsablauf der Liste der Validierer holen wird von der Konfiguration basiert auf die Geschäftsgruppe und führt die Validierungen in jedem der so enthaltenen Validatoren aus.
Gibt es Fehler bei diesem Ansatz? Oder gibt es einen besseren Weg, den beschriebenen Anwendungsfall zu behandeln?
Ich würde gerne wissen, ob es eine bessere Möglichkeit gibt, dies angesichts der Anforderungen zu gestalten. Da sich mein Projekt in der Entwurfsphase befindet, möchte ich so viele Alternativen wie möglich erkunden. – Rahul
Gibt es einen besonderen Grund, warum die Validierungslogik in separate Klassen unterteilt wird? Warum können Objekte sich nicht selbst validieren? 'if (! object1.isValid()) {...}' –
Basierend auf der Geschäftsgruppe, zu der ein Objekt gehört, CostValidator1 oder CostValidator2 oder keine Kostenvalidierung wird angewendet. In ähnlicher Weise können Objekte, die der Gruppe A angehören, drei Validatoren in der Pipeline haben, die zu B gehören. Außerdem kann ein Objekt von einer Unternehmensgruppe in eine andere verschoben werden, wie in der Zukunft benötigt wird. Dieses Objekt wird von verschiedenen Komponenten bearbeitet, die ihren eigenen Aspekt der Geschäftslogik implementieren. Die hier aufgeführten Validierer gehören zu einer solchen logischen Gruppierung. Auch die Codebasis für die Objektklasse folgt einem funktionelleren Ansatz gegenüber OO – Rahul