2017-11-25 232 views
2

我有一個財務系統,我必須設計一個保存,更新和控制限制的模塊。 您可以知道每個客戶都有一個用戶ID,每個用戶ID具有每天最高的信用額度。例如,UserID = 12具有MaxAmountPerDay = 10 $CurrentAmountPerDay如何計算,控制客戶信用並更新它?

起初,我想設計一個簡單的模塊和定義表如下:

User ID | MaxAmountPerDay | CurrentAmountPerDay 
------------------------------------------------- 
    12  | 10    | 0 
    25  | 100    | 84 

現在你能想象當用戶名顧客= 12做了交易我必須控制,如果交易金額+當前金額>最高金額然後拋出一個異常,否則我必須執行事務並更新當前金額,並且當更新後發生異常時,我必須回滾更新操作(update和rollback在不同的數據庫事務中所以回滾是與新金額相同的更新)

在我做這個設計之前,我決定尋找一個更好的解決方案,甚至是一個開源框架,因爲我想我的客戶的需求將在未來發生變化,例如他們需要MaxAmountPerMonth,或者一些更多的要求,我現在不知道。

回答

0

數據可能來自一個數據庫表或任何支持服務,這是不是一個真正的問題。
你只需要一些數據來有效的用戶事務。

關於框架,您可以使用BPM,但有這麼小的需求,這是一個開銷。
您可能會採取的一項措施來改進驗證規則維護,即將每個特定規則解耦爲 。
今天,你有一個驗證規則,但在將來,你很可能有多個規則可能使用戶事務失效。
馴養它們,你可以簡單地定義規則鏈:

TransactionRule rulesChain;

依賴驗證界面:

public interface TransactionRule{ 
    void valid(UserInformation userInformation) throw ValidationException; 
} 

鏈的每個元素都是那麼這個接口的實現。
當您在規則鏈上調用valid()時,它將應用第一條規則。
如果該規則受到用戶信息的尊重,則它將手傳遞給下一個規則。
等等...... 只要元素拋出ValidationException,這意味着該規則不被遵守,因此驗證結束,事務必須被取消。

建議的方式可能被視爲責任鏈模式的輕描述。
我說「輕」作爲規則執行的順序不應該在你的情況下重要,而它通常在這種模式中很重要。

0

我想你可以使用一個數據庫觸發器來實現這個requirement.It將幫助你實現你現在想要什麼

+0

嗨,雖然這可能是一個可能的解決方案,但也可以在你的回覆中稍微詳細一點,並且包括與他們如何實現觸發器相關的任何可能的代碼。請用所需的工作代碼片段編輯您的答案。 –

+0

是啊!我將在下一次做 –