2016-10-13 4 views
0

エンティティを作成して更新するときに、フォームのさまざまな検証スタイルを探しています。Spring MVCでの作成と更新のための異なるバリデータ

インスタンスの場合、 "UserClass"オブジェクトを作成する際にはIDを定義する必要がありますが、更新するとIDは必要ありません。作成ステップでユーザーが定義するためです。私には多くの実体があり、私は最も適切な方法を見つける必要があります。

たとえば、この論理ですか?

public interface RecordGroupValidator { 

    public void validateNew(RecordGroup recordGroup, Errors errors); 

    public void validateUpdate(RecordGroup recordGroup, Errors errors); 
} 

バリ:

public class RecordGroupValidatorImpl implements RecordGroupValidator { 

    @Autowired 
    RecordGroupService recordGroupService; 

    @Override 
    public void validateNew(RecordGroup recordGroup, Errors errors) { 
     if (!ValidationHandler.validText(recordGroup.getIds())) { 
      errors.rejectValue(ColumnIdentifier.COLUMN.Ids.name(), TextParameters.SERVLET_RESPONSE.InvalidParameter.getText()); 
     } 
     if (!ValidationHandler.validText(recordGroup.getName())) { 
      errors.rejectValue(ColumnIdentifier.COLUMN.Name.name(), TextParameters.SERVLET_RESPONSE.InvalidParameter.getText()); 
     } 
     if (recordGroup.getRecordGroupType() == null) { 
      errors.rejectValue(ColumnIdentifier.COLUMN.RecordGroupType.name(), TextParameters.SERVLET_RESPONSE.InvalidParameter.getText()); 
     } 
     if (recordGroupService.idsExist(recordGroup.getIds())) { 
      errors.rejectValue(ColumnIdentifier.COLUMN.Ids.name(), TextParameters.SERVLET_RESPONSE.DuplicateEntry.getText()); 
     } 
     if (recordGroupService.nameExist(recordGroup.getName())) { 
      errors.rejectValue(ColumnIdentifier.COLUMN.Name.name(), TextParameters.SERVLET_RESPONSE.DuplicateEntry.getText()); 
     } 
} 

    @Override 
    public void validateUpdate(RecordGroup recordGroup, Errors errors) { 
     ValidationUtils.rejectIfEmptyOrWhitespace(errors, ColumnIdentifier.COLUMN.Name.name(), TextParameters.SERVLET_RESPONSE.InvalidParameter.getText()); 
     if (recordGroup.getRecordGroupType() == null) { 
      errors.rejectValue(ColumnIdentifier.COLUMN.Type.name(), TextParameters.SERVLET_RESPONSE.InvalidParameter.getText()); 
     } 
    } 
} 

答えて

0

私はあなたが2つの検証を作成するべきだと思います。 1つは作成用、もう1つは更新用です。これは賢明なアーキテクチャを作成します。今のところあなたには1つの違いしかありませんが、将来はもっと多くのことができます。私の意見では、あなたは今それらを分割すべきです。

+0

上記の例はどうですか? 1つのエンティティでは、作成操作のために "validateNew"メソッドを定義し、更新操作のために "validateUpdate"メソッドを定義しました。これは動作しますが、数十のエンティティに対して同じメソッドを適用するのは難しいです。 – devrim

+0

私にとっては、より多くのコードを書くのが良いですが、簡単に追加できるように新しい機能を追加したいときです。しかし、いくつかの共通ロジックを記述し、2つの方法で呼び出すことができます。あるいは、リフレクションを使って動的コードを書くこともできます。 –

+0

私も、私はより明確なコードを書くことを好む。しかし、プロの世界では、開発者は多くのコードに書き込むと言うことができます。私がコードを開発している間、私はそれをより専門的にしようとします、そして、私が何をするかを確信することはできません。 – devrim

関連する問題