ドメインオブジェクトをシステムの他の部分に渡す前に、ドメインオブジェクトを検証したいと考えています。検証したいすべてのオブジェクトが同じインターフェイスを共有しています。問題は、私がこれを良い方法で書く方法を理解することができないということです。私は自分のバリューオブジェクト内で検証を移動したくありません。しかし、私はinstanceOf-checkのどちらかを強制的に実行することは望ましくありません。Javaの値オブジェクト(継承)を検証する
例:Scalaで
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);
}
私はhttp://debasishg.blogspot.se/2010/06/scala-implicits-type-classes-here-i.html に似た何かをやっているだろう。しかし、これらの言語は、Javaで可能ではない構築。
:
あなたは、実行時に動的にバリデータの適切な方法にバインドされる車両にコールバックコードのほんの少しを追加する必要があります[*訪問者パターン*](http://en.wikipedia.org/wiki/Visitor_pattern)について。 –
バリデーションメソッドを値オブジェクトに入れないのはなぜですか?つまり、インタフェース階層を整理しても、値オブジェクトの自然な階層をサポートするために、バリデータ実装を連鎖させる必要があります。 – Perception
このシナリオでinstanceOfを使用しない理由は何ですか? – Zylth