Voglio convalidare i miei oggetti dominio prima di passarli su un'altra parte del sistema. Tutti gli oggetti che voglio convalidare condividono la stessa interfaccia. Il problema è che non riesco a capire come scrivere questo in un buon modo. Non voglio spostare la convalida all'interno del mio oggetto valore. Ma non voglio essere costretto a fare un'istanza di controllo.Convalida gli oggetti valore (ereditarietà) in java
Un esempio:
public interface Vehicle {}
public class Car implements Vehicle {}
public class MotorBike implements Vehicle {}
public interface VehicleValidator {
void validate();
}
public class CarValidator implements VehicleValidator {
@Override
public void validate() {}
}
public class MotorBikeValidator implements VehicleValidator {
@Override
public void validate() {}
}
public void process(Vehicle vehicle) {
//TODO: validate vehicle
doSomething(vehicle);
}
In Scala avrei fatto qualcosa di simile a http://debasishg.blogspot.se/2010/06/scala-implicits-type-classes-here-i.html Ma quei costrutti del linguaggio non è possibile in Java.
Suona un po' come si sta chiedendo su [* visitor pattern *] (http://en.wikipedia.org/wiki/Visitor_pattern). –
Perché non vuoi mettere il metodo di validazione nell'oggetto valore? Allo stesso modo, anche se si pulisce la gerarchia dell'interfaccia, sarà comunque necessario associare le implementazioni del validatore, al fine di supportare la gerarchia naturale degli oggetti valore. – Perception
Per curiosità, esiste un motivo per non utilizzare un'istanza in questo scenario? – Zylth