我想在將它們傳遞給系統的其他部分之前驗證我的域對象。我想驗證的所有對象共享相同的接口。問題是,我無法弄清楚如何以良好的方式寫出這些。我不想在我的值對象中移動驗證。但我不想被迫做一個實例檢查。驗證java中的值對象(繼承)
一個例子:
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);
}
在Scala中我會做類似http://debasishg.blogspot.se/2010/06/scala-implicits-type-classes-here-i.html 但這些語言結構的東西是不可能在Java中。
這聽起來很像你問關於[*訪問者模式*](http://en.wikipedia.org/wiki/Visitor_pattern)。 –
爲什麼你不想將驗證方法放在值對象中?實際上,即使您清理了接口層次結構,您仍然需要鏈接驗證器實現,以支持值對象的自然層次結構。 – Perception
出於好奇,是否有這樣一個理由反對在這種情況下使用instanceOf? – Zylth