2010-08-10 62 views
1

我有一個知識庫用於執行我的數據模型驗證。 UI中的修改事件會異步發佈到單獨的線程,以更新知識庫並觸發規則。驗證錯誤會觸發錯誤對象的邏輯插入。我可以收集這些信息並將事件異步發送回UI線程。但是,爲了使UI保持最新更容易,我還希望在用戶修復錯誤時發佈事件 - 即從錯誤對象中撤消知識庫。接收到Drools邏輯回收事件的通知

我對如何做到這一點有兩個想法,我都不喜歡這兩個想法:
我可以聽程序代碼中的工作記憶事件,但這會違反驗證功能在知識庫中的封裝。或者,我可以插入一個與我的邏輯插入錯誤對象配對的標誌對象,並編寫一個檢測未配對標誌的規則,將它們撤回,並觸發「錯誤修正」事件。

如上所述,是否存在一種基於錯誤對象的邏輯回收來激活規則的乾淨而簡單的方法?

回答

1

自我回答,以便我可以稍後鏈接到此,並找出是否有更好的方法來做到這一點。

這是我清盤的辦法考慮:

  1. 當驗證規則被觸發,insertLogical與代表驗證錯誤(例如ValidationMessage)的唯一ID的對象。

  2. ValidationMessage有一個屬性「標記」,該屬性默認爲false。

  3. 定義觸發存在未標記的ValidationMessages的規則。在RHS中,標記消息並對全局事件處理程序進行onAssert調用。使用與ValidationMessage相同的ID插入第二個對象(例如ValidationMessageFlag)。

  4. 定義一個規則,當沒有相應的ValidationMessage(具有相同的ID存在)時觸發存在ValidationMessageFlag。在RHS中,在全局事件處理程序中調用onRetract。撤消ValidationMessageFlag。