【发布时间】:2011-07-27 18:20:31
【问题描述】:
假设我有一个金融交易列表,我需要针对这些交易执行一个验证规则列表。一个例子是我有一笔购买产品的交易,但是首先我需要验证交易中的账户是否有足够的可用资金,产品没有售罄等。由于这些规则很多,交易将是标记为拒绝,并指定错误代码。
当然,我正在考虑在我的规则前面加上一个接口,允许执行代码滚动执行每个规则,直到第一个拒绝事务。
每个规则都需要配置参数(例如,ValidateMinimumBalance 需要知道 minimumBalance = 30)。规则执行的结果可以很简单,只需在交易对象上设置拒绝代码和错误代码;或者它可以像自动修改事务的多个其他属性一样复杂。
我对设计模式的基本理解指向策略模式或命令模式,但我不完全确定哪个更适合这种情况。
命令模式
- 每个命令都会实现某种 IValidate 接口
- 命令的构造函数将事务实例作为接收者,以便能够读取/验证事务以及修改事务的各个方面。构造函数还将采用键/值对数组作为验证逻辑的参数。
当我试图描绘策略模式如何适应这种情况时,它看起来非常相似。在大多数示例中,策略是具有单一方法的简单对象,但在我的情况下,策略将需要对事务的引用以及验证参数。
【问题讨论】:
-
如果您认为这些规则会经常更改或业务用户需要访问它们,那么规则引擎也是一个可行的替代方案。你可以看看 JBoss Drools 或 IBM 的 iLog。
标签: c# java .net design-patterns architecture