検証ロジックについて

検証ロジックは、ビジネス・ロジック層のデータを作成または変更するときに常に使用されます(既存の表のデータは有効であると想定されることに注意してください)。

検証ロジックの実装方法

検証ロジックはビジネス・ロジック層に次のように適用できます。

これらは検証が行われる順にリスト表示されます。つまり、ドメイン検証が最初に行われます。

エンティティ属性およびビュー属性のデータ型としてのドメインの使用

検証ドメインを型として使用するすべての属性には、検証ドメインによってビジネス・ロジックが追加されます。このドメイン型のオブジェクトが作成されると、ドメインの検証が行われます。これにより、再構成または再検証することなく、異なる層の間でデータ・オブジェクトを渡すことが可能です。

検証ドメインは、エンティティ属性と同じ設定を持つことができます。エンティティ属性がドメインを型として持つ場合、その属性はドメインの設定を継承します。属性によりドメインの設定がさらに制限されることはありますが、制限が緩和されることはありません。たとえば、あるドメイン型に一時属性を含めない場合は、そのドメインを永続的としてマークします。

エンティティのsetAttribute()メソッドへのコードの追加

単一の属性値の検証ロジックを追加する場合は、setAttribute()メソッドを編集できます。

ビジネス・コンポーネント・フレームワークでは、各エンティティ・オブジェクトに固有のsetAttribute()メソッド(Department.setLocationなど)を作成できます。属性を設定する前または後に検証を追加できます。適切なコーディング例としては、setAttribute()メソッドをオーバーライドする場合に、setAttributeInternal()をコールする前に例外をスローする検証ロジックがあります。これ以外の方法で、例外がスローされる前に属性の以前の値を取得するのは困難です。

属性検証ロジックを1つのメソッドに追加する場合は、setAttributeInternal()属性もオーバーライドできます。検証ロジックを追加し、例外がある場合には捕捉してから、super.setAttributeInternal()をコールするようにしてください。そうしないと、(例外がスローされる前に)以前の値を取得するのが困難になります。

validateEntity()メソッドへのコードの追加

ベースのEntityクラスにより、エンティティ・オブジェクトでオーバーライドできるvalidateEntity()メソッドが提供されます。エンティティ検証は、ある行から別の行へ移動するとき起動されます。エンティティ検証は、複数の属性値を検証する場合に便利です。行全体の値が入力されるまで個別のフィールドの検証を行わない場合や、関連付けられているエンティティ・オブジェクトの値を検証する場合などです。たとえば、Salary属性を設定するとき、役職名、通貨などの別のフィールド値のチェックが必要な場合があります。また、開始日として終了日よりも前の日付を設定する必要がある場合など、日付の範囲をチェックする場合もあります。

エンティティ・オブジェクトおよびエンティティ属性に対する検証規則の適用

検証規則では、検証の再利用パターンがカプセル化され、適切なパラメータ値を指定することにより、これを使用できます。エンティティ・オブジェクト・エディタを使用して、コードを記述せずに単純な規則を定義し、適用できます。検証規則はXMLで格納され、Javaコードを再コンパイルせずに規則をカスタマイズできます。

コンポジットの定義

コンポジットによって、エンティティ・オブジェクト・レベルでの親子階層の検証が提供されます。親のvalidateEntity()メソッドが、検証メソッドをコールして子を検証します。たとえば、注文システムの場合、コンポジットを使用すると、明細品目がすべて有効でないかぎり注文も有効になりません。

ドメインまたは検証規則を使用する場合、あるいはJavaコードを変更する場合

ドメインと検証規則のどちらに検証ロジックを追加するかを決定する際には、ドメインが複数の属性で利用できるのに対して、検証規則は1つの属性またはエンティティ・オブジェクトのみに適用されるということに注意してください。たとえば、電子メール・アドレスを検証する場合には、後で他の属性にドメインを使用できるため、ドメインを使用する方が便利です。しかし、フィールドにPlatinum、GoldまたはSilverのいずれかが含まれているかどうかをチェックする場合は、検証規則を使用します。これは、他の属性でこれらの値を使用する可能性が低いためです。

また、ドメインと検証規則を使用するかわりに、エンティティ・オブジェクトのJavaソース・ファイルを変更して検証ロジックを実装することも可能です。検証規則と同様、このロジックを適用できるのはエンティティ・オブジェクトまたは属性のみですが、検証規則では不可能な、複雑なロジックも追加できます。


検証ロジックの実装


 

Copyright © 1997, 2004, Oracle. All rights reserved.