繁体   English   中英

FactRetriever如何执行策略?

[英]How the Policy Execution works using FactRetriever?

我正在使用以下链接检查FactRetriever类的文档:

http://msdn.microsoft.com/en-us/library/ee253709%28v=bts.10%29.aspx

它说:

事实检索器是一个组件,用于在执行过程中将长期事实的实例声明到策略中。 您可以实现IFactRetriever接口,并配置策略版本以在运行时使用此实现来引入长期事实实例。 如果为该特定版本配置了事实检索器,则该策略版本会在每个执行周期中调用事实检索器实现的UpdateFacts方法。

我试图独立使用Business Rule Composer (不使用业务流程)。

问题1: 执行周期何时发生? 如何触发?

  • 是否基于时间间隔? 如果是这样,它是否可配置?
  • 如果事实发生变化,是否有某种机制可以执行策略? 如果是这样, 那么问题2的答案是什么?

问题2: 执行周期到底能做什么? 算法是什么?

  • 可能的算法1.首先执行Policy ,然后在其执行期间,它将调用UpdateFacts以便将新鲜对象带入内存以对其应用策略。
  • 可能的算法2.首先, UpdateFacts以某种方式执行,然后,如果某些相关事实被更改,并且有与这些事实相关的某些策略,它们将触发对更改后的事实执行。

A1:您可以按字面意思阅读。 每次执行Policy时,如果在执行任何其他实际规则之前调用IFactRetriever,则将执行实现的UpdateFacts方法。 没有计时器,也没有其他要配置的东西。 每次意味着每次。

无法,也没有理由在策略执行之外更新长期事实。 当然,事实可能会发生变化,但是如果不执行该策略,则该更新是浪费的。 作为IFactRetriever的实现者,您的职责是跟踪事实的变更并通过UpdateFacts提供最新的事实。 引擎或策略无法“知道”何时更新事实。 从技术上讲,该政策并不关心事实已经改变。 它将始终根据其事实评估规则。

A2:一个执行周期就是,任何调用者对Policy的单次调用,例如Policy.Execute()的调用。 您可以在此处看到一个示例: http : //msdn.microsoft.com/en-us/library/aa995566.aspx

该算法尽可能简单。 就我们的目的而言,假设已配置了事实检索器,则假定UpdateFacts是规则引擎在调用Execute之后执行的第一件事。 每次都会发生这种情况。 除了在执行后立即执行更新事实,决不会在其他任何时间调用更新事实。 这是按执行。

但是,还值得指出的是,引擎可以在内存中创建Policy的多个实例,以便可以在同一Process中为多个调用者提供服务(从技术上讲,它可能是AppDomain,从不费力检查)。 因此,对策略的任何给定实例上的每个执行都调用UpdateFacts。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM