samedi 4 mars 2023

Clean validation of complex object hierarchy

I am looking for the cleanest way to validate complex hierarchies of objects.

I have a master class names Container. Constainer consists of some string fields and ContainerProp. ContainerProp is abstract class with many subclasses like PropA, PropB etc. PropA has a Constraint which is albo an abstract class with many subclasses like ConstraintA, ConstraintB... Additionally, ConstraintA has a Rating object. The structure may go even deeper, but lets stay with that.

Bit complex, I know, but I can't modify this structure.

When it comes to code, it looks like this:

public class Container {
    //some fields, constructors and methods
    private ContainerProp containerProp;
}
public abstract class ContainerProp {
    //some fields, constructors and abstract methods
}
public class PropA extends ContainerProp {
    //some fields, constructors and methods
    private Constraint constraint;
}
public abstract class Constraint {
    //some fields, constructors and abstract methods
}
public class ConstraintA extends Constraint {
    //some fields, constructors and methods
    private Rating rating;
}

public class Rating {
    private String x;
    private String y;
}

I am thinking of some clean and elegant way to validate the whole structure just by using container.validate() or something like this. The first idea that I had was using visitor pattern. It would work perfectly for single superclass-subclass level, but I am not really sure if using visitor for the whole structure is the right approach, as it seems a little bit too wide. Do you know some clean way to solve this problem? Thanks in advance

Aucun commentaire:

Enregistrer un commentaire