策略执行如何使用FactRetriever工作



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

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

上面写着:

事实检索器是一个组件,用于断言政策执行过程中的长期事实。您可以实施IFactRetriever接口,并配置要使用的策略版本这种在运行时的实施带来了长期的事实实例。策略版本调用事实检索器在每个执行周期上的实现,如果事实检索器是为那个特定版本配置的。

我正在尝试独立使用Business Rule Composer(不使用编排)。

问题1:执行周期何时发生?它是如何被触发的?

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

问题2: 执行周期具体做什么?算法是什么?

  • 可能的算法1.首先执行Policy,然后在执行过程中,它将调用UpdateFacts,以便将新对象带入内存以应用策略
  • 可能的算法2.首先UpdateFacts以某种方式执行,然后,如果一些相关事实发生了更改,并且存在与这些事实相关的一些策略,则它们将触发对更改的事实执行

A1:你可以从字面上理解。每次执行Policy时,都会在任何其他实际的Rule处理之前调用实现的UpdateFacts方法if IFactRetriever。没有定时器,也没有其他真正需要配置的东西。每一次都意味着每一次。

没有办法也没有理由在政策执行之外更新长期事实。当然,事实可能会改变,但如果不执行策略,那么更新就是浪费。作为IFactRetriever的实现者,您的工作是跟踪对事实的更改,并通过UpdateFacts提供最新的事实。引擎或策略不可能只"知道"何时更新事实。从技术上讲,政策并不关心事实是否发生了变化。它将始终根据其掌握的事实来评估规则。

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

该算法尽可能简单。出于我们的目的,假设UpdateFacts是规则引擎在调用Execute后所做的第一件事,当然,如果配置了Fact Retriever的话。这种情况每次都会发生。除了在执行之后立即调用Update Facts之外,从不在任何其他点调用它。这是每次执行。

然而,还值得指出的是,该引擎可以在内存中创建策略的多个实例,以便在同一进程中为多个调用方提供服务(从技术上讲,它可能是AppDomain,从不需要检查)。因此,对策略的任何给定实例的每次执行都会调用UpdateFacts。

最新更新