业务逻辑规则
我们刚刚展示了如何在业务流程中插入规则引擎。现在让我们来看看如何利用该规则引擎以及如何编写映射到业务规则的规则。
规则包括两个部分:应用该规则时必须为真的条件,以及当条件满足时将执行的动作。因此,要在应用程序中使用规则,设计人员必须首先定义哪些对象和属性在测试规则条件时对规则编写者是可见的。规则引擎允许在一个条件中调用任意多个方法。这种构造方式便于定义JavaBean作为组成初始事实集合的对象,规则引擎使用这些初始事实来进行推理。可以使用bean的 get方法来获得条件测试的值。
规则所引用的Java对象需要从创建它的WLI流程以及从规则引擎本身中都可见。这就避免了这些对象与流程JPD位于同一包中,更确切地说,它们应该被创建于作为同一应用程序的一部分的Java项目中。然后,这些对象可以通过package.class标记在规则文件(.rls)和流程JPD中引用。
在我们的交易示例中,将把不同的交易分组以便可以成块执行。为实现该目标,我们定义两个bean来表示相关的对象。第一个是Trade bean,它表示单个的交易订单。这个bean的属性表示交易的份额、股份数目以及所期望的价格等。任何对于决定交易所属的块来说可能有用的值,都应该作为这个具有公有get方法的bean的属性,以便能够在规则中使用它。第二个bean是Block bean,通过它可以存储所有根据某个属性集聚合在一起的不同交易。这个bean的属性包括规则中任何可用于判定块大得足以执行订单的的信息。这些属性可以是平均价格、交易的总美元数或总的份额数等等。
为了在我们的应用程序中实现块功能,首先使用规则来定义某项交易是否只需要执行其自身就足够了(也就是说,它是仅包含单个交易的块),或者如果不是这样的话,那么应该使用什么属性将其与其他交易聚集以形成一个块。在一项交易聚集到适当的块中后,就会第二次调用规则引擎来判断该块是否完成。例如,假设我们想要得到这样的规则:
- 规则1:任何5,000股及以上的单项交易应该作为一个块并予以执行。
- 规则2:由同一个投资管理者定购的具有相同标记的交易应该聚集在一起。
- 规则3:总价值超过,000的块应该予以执行。
(编辑:aniston)
|