文字列IDのプロパティが必要なStudentクラスがあり、これを検証する必要があります。学生クラス内で検証するのか、学生クラスを実装しているクラス内で検証するのかわかりません。それは意味がありますか?
3 に答える
IDが最終的で不変であると仮定すると、1つのアプローチは、Studentコンストラクターに例外をスローさせることです。new IllegalArgumentException("Invalid student ID");
さらに、Studentオブジェクトを作成せずに文字列をチェックする必要がある場合に備えて、文字列が有効かどうかを検証する静的メソッドをStudentクラスに提供できます。
しかし、IDが有効かどうかを判断するロジックは、Studentクラスにあるべきだと思います。
異なる種類の学生IDがある場合(または将来的に存在する可能性がある場合)、抽象ファクトリパターンを検討することもできますが、それは少しやり過ぎのように聞こえます。
アプローチの1つは、検証オブジェクトを使用することです。たとえば、SpringFrameworkで使用されている検証アプローチを参照してください。2つのメソッドを使用してインターフェイスを実装するオブジェクトを作成しますValidator
。1つはValidatorがインスタンスを検証して検証できるかどうかを検出する方法で、もう1つはインスタンスを検証する方法です。
public class StudentValidator implements Validator<Student> {
public boolean supports(Student student) {
// ...
}
public void validate(Object target, Errors errors) {
// ...
}
}
このアプローチにより、オブジェクトのコードとそれを検証する方法が分離され、バリデーターを組み合わせる際の柔軟性が高まります。
- クラス階層が尊重されない場合でも、複数のValidatorを組み合わせることができます(POJOの原則)。
- 他のシステム(データベースなど)のデータを使用してフィールドを検証する必要がある場合、このアプローチでは、POJOドメインクラスにデータベースと永続性のコードを混在させないようにします。
検証については、Springのドキュメントを参照してください。
学生がすでに内部でビジネスを行っている場合は、内部で検証し、それ以外の場合は2番目のビジネスを使用します
Class Student
{
public boolean validate ()
{
//some logic to validation
}
}
モデルまたはコントローラーまたはアクションの内部
public boolean validate ()
{
//some logic to validation
}