如何计算,控制客户信用并更新它?

时间:2017-11-25 12:25:55

标签: java design-patterns frameworks open-source

我有一个财务系统,我必须设计一个模块来保存,更新和控制限制。 您可以知道每个客户都有一个UserID,每个UserID每天都有最大的信用额度。例如, UserID = 12的MaxAmountPerDay = 10 $ CurrentAmountPerDay

首先,我想设计一个简单的模块,并按如下方式定义一个表:

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

现在您可以想象,当 UserID = 12 的客户完成了一项交易时,我必须控制交易金额+当前金额>最大金额然后抛出异常我必须做事务并更新当前金额,当更新后发生异常时我必须回滚更新操作。(更新和回滚在不同的数据库事务中,所以回滚是相同的更新与新金额)

在我做这个设计之前,我决定寻找更好的解决方案,甚至是开源框架,因为我猜我的客户的要求将来会发生变化,例如他们可能需要 MaxAmountPerMonth ,或者我现在不知道的更多要求。

2 个答案:

答案 0 :(得分:0)

我认为您可以使用数据库触发器来实现此要求。它将帮助您实现您想要的目标

答案 1 :(得分:0)

数据可能来自数据库表或任何支持服务,但实际上并不是问题 您只需要一些数据来验证用户事务。

关于框架,您可以使用BPM但需求量很小,这是一个开销 您可以采取哪些措施来改进验证规则维护 解除每个特定规则 今天,您有一个验证规则,但将来,您很可能会有多个规则可能会使用户事务无效。
要处理它们,您可以简单地定义一系列规则:

TransactionRule rulesChain;

依赖验证界面:

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

链的每个元素都是这个界面的实现 当您在规则链上调用valid()时,它会应用第一条规则 如果规则受到用户信息的尊重,则将手传递给下一个规则。
所以... 一旦元素抛出ValidationException,就意味着规则不受尊重,因此验证结束并且必须取消交易。

建议的方式可被视为责任链模式的轻量级版本 我说“轻”作为规则执行的顺序在你的情况下并不重要,而在这种模式中通常很重要。