我有一个财务系统,我必须设计一个模块来保存,更新和控制限制。 您可以知道每个客户都有一个UserID,每个UserID每天都有最大的信用额度。例如, UserID = 12的MaxAmountPerDay = 10 $ 和 CurrentAmountPerDay 。
首先,我想设计一个简单的模块,并按如下方式定义一个表:
User ID | MaxAmountPerDay | CurrentAmountPerDay
-------------------------------------------------
12 | 10 | 0
25 | 100 | 84
现在您可以想象,当 UserID = 12 的客户完成了一项交易时,我必须控制交易金额+当前金额>最大金额然后抛出异常我必须做事务并更新当前金额,当更新后发生异常时我必须回滚更新操作。(更新和回滚在不同的数据库事务中,所以回滚是相同的更新与新金额)
在我做这个设计之前,我决定寻找更好的解决方案,甚至是开源框架,因为我猜我的客户的要求将来会发生变化,例如他们可能需要 MaxAmountPerMonth ,或者我现在不知道的更多要求。
答案 0 :(得分:0)
我认为您可以使用数据库触发器来实现此要求。它将帮助您实现您想要的目标
答案 1 :(得分:0)
数据可能来自数据库表或任何支持服务,但实际上并不是问题 您只需要一些数据来验证用户事务。
关于框架,您可以使用BPM但需求量很小,这是一个开销
您可以采取哪些措施来改进验证规则维护
解除每个特定规则
今天,您有一个验证规则,但将来,您很可能会有多个规则可能会使用户事务无效。
要处理它们,您可以简单地定义一系列规则:
TransactionRule rulesChain;
依赖验证界面:
public interface TransactionRule{
void valid(UserInformation userInformation) throw ValidationException;
}
链的每个元素都是这个界面的实现
当您在规则链上调用valid()
时,它会应用第一条规则
如果规则受到用户信息的尊重,则将手传递给下一个规则。
所以...
一旦元素抛出ValidationException
,就意味着规则不受尊重,因此验证结束并且必须取消交易。
建议的方式可被视为责任链模式的轻量级版本 我说“轻”作为规则执行的顺序在你的情况下并不重要,而在这种模式中通常很重要。