1

データモデルの検証を実行するための知識ベースがあります。UIからの変更イベントは、ナレッジベースを更新してルールを実行する別のスレッドに非同期で送信されます。検証エラーは、エラーオブジェクトの論理挿入をトリガーします。これらを収集し、イベントを非同期でUIスレッドに投稿できます。ただし、UIを最新の状態に保つのを簡単にするために、ユーザーがエラーを修正したとき、つまりエラーオブジェクトがナレッジベースから撤回されたときにもイベントを投稿したいと思います。

これを行う方法について2つのアイデアがありますが、どちらも好きではありません。
手続き型コードからワーキングメモリイベントをリッスンできますが、ナレッジベース内の検証機能のカプセル化に違反します。

または、エラーオブジェクトの論理的な挿入とペアになっているフラグオブジェクトを挿入し、ペアになっていないフラグを検出して撤回し、「エラー修正済み」イベントを発生させるルールを作成することもできます。

上記のようにエラーオブジェクトの論理的な撤回に基づいてルールをアクティブ化するためのクリーンで簡単な方法はありますか?

4

1 に答える 1

1

後でこれにリンクして、それを行うためのより良い方法があるかどうかを調べることができるように、自己回答します。

これが私がとったアプローチです:

  1. 検証ルールがトリガーされると、検証エラーを表す一意のIDを持つオブジェクトをinsertLogicalします(例:ValidationMessage)。

  2. ValidationMessageには「flagged」プロパティがあり、デフォルトはfalseです。

  3. マークされていないValidationMessagesの存在をトリガーするルールを定義します。RHSで、メッセージにマークを付け、グローバルイベントハンドラーに対してonAssert呼び出しを行います。ValidationMessageと同じIDを持つ2番目のオブジェクト(ValidationMessageFlagなど)を挿入します。

  4. 対応するValidationMessageが(同じIDで)存在しない場合に、ValidationMessageFlagの存在時にトリガーされるルールを定義します。RHSで、グローバルイベントハンドラーでonRetractを呼び出します。ValidationMessageFlagを撤回します。

于 2011-06-22T13:56:38.990 に答える