2012-11-27 55 views
2

在我的項目中,我將存儲庫模式用於業務層。閱讀關於存儲庫模式的許多信息我還沒有找到關於如何保持業務對象與數據同步的任何信息。存儲庫模式和數據一致性

比方說,我已經加載了一些數據,通過映射創建我的業務對象並將它們保存到存儲庫。我的存儲庫實現維護更改跟蹤,以便我可以輕鬆更新底層數據層。

該應用程序是與多個客戶端n層應用程序,以及(可能的)上的不同的獨立的服務器上的多個業務層實例。

問題:
如何保持倉庫中的業務對象和數據庫中各個數據之間的數據一致性?

是否有任何圖案或有關何時以及如何更新誰的數據是在數據庫中更改,而他們在庫緩存業務對象的最佳實踐?

+0

有一件事你或許應該考慮的是,這個問題是否真的具體到庫模式:我敢說這其實是不相關的,也就是說,即使你使用訪問您的數據庫另一種模式(讓我們說活動記錄),您仍然需要考慮是否(以及如何)將業務對象與數據庫中的更改同步。 – stakx

+0

感謝您的回覆。其實我確實明白這個問題不是Reporitory模式的特定問題,但這並不能讓事情變得簡單:) – Alexey

回答

0

當一個聚合根(AR)在同一時間處理,事情很簡單,因爲存儲庫應該換什麼realted在事務中是AR(或承諾)。問題在於當持久性不支持事務時處理多個AR和/或。

對於這種情況,解決的辦法是有點棘手,因爲它涉及beign舒適的最終一致性概念(又名事情將是一致的......最終),消息驅動的體系結構,傳奇和冪等。

簡而言之,更新一個Ar來生成一個或多個事件。另一個AR訂閱這些事件並更新其狀態並生成其他事件。在這種情況下,基礎設施即消息總線將確保每個事件至少在發佈。事情可能會出錯,但消息總線將最終傳遞消息(但不完全在相同的毫秒)

事件處理程序等冪保證操作可以在不改變初始結果而佐賀管理事件和possbile命令的流量(作爲事件的結果)被重複。

因此,所有涉及的業務對象將是同步的,最終,但這需要一點時間來做到這一點(從1到milisecond分鐘和小時)。

這不是容易和簡單,但它並不難,它無論是在本地和disitrbuted場景是非常有用的。

對於分佈式應用程序,你可以使用NServiceBus