0

私の言語のMyDslJavaValidatorバリデータに@Checkは、ツリーのトップからのコンテキスト情報を必要とする が含まれています。指定された要素から開始してモデルをトラバースすることにより、check メソッド自体でその情報を収集できます。ただし、コンテキスト情報は現在の要素に依存しないため、これはかなり非効率的です。

一部の状態を一度だけ計算し、すべての検証で使用できるようにする方法はありますか? 状態をメンバー変数にキャッシュすることは確かにできますが、バリデータ オブジェクトのライフサイクルが不明なため、これが安全かどうかはわかりません。明らかに、基礎となるモデルが変更されたときに情報を再計算する必要があります。

このような状況で従うのに最適なパターンは何ですか?

4

1 に答える 1

0

簡単な方法は、「The Index」を使用して情報を保存することです。

概要:

  • カスタマイズすることで、ツリーの最上部近くにあるオブジェクトに対応するのマップにIDefaultResourceDescriptionStrategyカスタム情報を入れることができます。userDataIEObjectDescription

  • 戦略は、リソースが変更されるたびに呼び出されます。そのため、常に最新の状態に保たれます。

  • バリデーターはIEObjectDescription、ツリーの最上部近くにあるオブジェクトのインデックスをクエリし、抽出してuserData完了できます。

インデックスの操作とアクセスの詳細については、「リンク」セクションで説明しています。

于 2013-06-28T15:03:18.483 に答える