我想在将它们传递给系统的其他部分之前验证我的域对象。我想验证的所有对象共享相同的接口。问题是,我无法弄清楚如何以良好的方式写出这些。我不想在我的值对象中移动验证。但我不想被迫做一个实例检查。验证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