外包您的业务规则
本文着重介绍了基于规则的应用程序相对于传统系统开发的优势。
摘要
这篇基础文章着重介绍了基于规则的应用程序相对于传统系统开发的优势。
近年来,一种名为业务规则管理系统(BRMS)的新型软件受到了越来越多的关注。这些系统用于外部化业务规则,并提供集中的业务规则管理功能。基于规则的应用程序解决了所有组织面临的许多紧迫需求:更改业务规则以适应加速的业务变化,并克服IT响应缓慢的限制。
本文将介绍基于规则的处理系统如何通过实现这些目标来带来效益。第一部分提供了基于规则设计的概述,第二部分解释了如何使用Kontac.net的Smart Rules免费版本Smart Rules Lite来构建基于规则的应用程序。
引言
近年来,一种名为业务规则管理系统(BRMS)的新型软件已经出现。BRMS是专家系统,旨在为复杂问题提供灵活的解决方案,并允许轻松地整合新知识。
BRMS简化了将策略定义与实现和代码细节分离的任务。通过采用BRMS,公司可以比传统方法更有效地支持变更和周期,从而阐明业务规则与业务策略之间的关系。
为什么使用BRMS?
当今软件产品的大部分复杂性源于需求,这些复杂性体现在行为和功能上,导致组件实现中包含复杂的业务逻辑。理想情况下,业务逻辑被细分为模块,这些模块封装在对策略感兴趣的所有对象都可见的独立对象中。这些对象封装了全局或组织策略,而属于特定类(如客户或产品)的规则集则存储在这些对象中。
通过BRMS,业务逻辑被分离出来,并且可以在不影响应用程序其余部分的情况下进行更改。将规则与应用程序分离意味着BRMS系统会将知识存储在中央存储库中,并由独立的应用程序执行。理想情况下,一个好的BRMS应该允许分离的规则集得到维护并进行版本控制。
使用BRMS解决方案的一些好处包括:
- 灵活性:越来越多的企业正在使其应用程序能够针对不同类别的客户或单个客户采取不同的行为。这可能涉及到相同的基本应用程序,但根据每个客户的合同条款应用不同的规则。
- 敏捷性:实现BRMS可以大大简化业务逻辑的更改过程,因为可以通过隔离变更来在不更改程序代码的情况下实现变更请求,从而能够快速将规则变更部署到生产环境,并让应用程序近乎实时地执行它们。
- 集中化:在基于规则的应用程序中,所有业务逻辑都位于编译后的应用程序之外,存储在一个分离的存储库中,分布在整个企业中。
BRMS允许业务分析师甚至用户创建、理解和维护业务的规则和策略。通过BRMS,业务规则实现的责任从开发人员转移回应有的主体:业务人员。业务人员可以控制他们的业务规则是如何执行的,并且,更重要的是,系统设计旨在在业务规则发生变化时促进变更。
BRMS的组件和技术特性
BRMS是一套工具,策略经理和软件工程师使用它们来构建将业务策略从软件代码中抽象出来的系统,在那里它们可以直接编写、修改和管理,而独立于底层软件系统。
BRMS与专家系统相关,有时称为知识库系统,它们处理符号的、非算法的问题解决方法。这些系统可以在一个狭窄的领域内提供接近人类专家水平的建议或做出决策。
BRMS主要有两个部分:知识库和推理机制,或简称为引擎。
此外,通常还有用于方便用户交互、帮助构建知识库、解释推理过程等的子程序。
知识库是程序存储的关于某个主题领域(如贷款或客户信息)的事实和关联。“知道”的信息。关键的设计决策是如何在程序中表示这些知识。知识库通常包含不同类型的知识;典型地,这些包括关于对象、过程和因果关系的知识。关于对象知识通常以对象模型、XML模式或数据模型的形式存储。过程知识可能以.NET方法的形式表示。
在BRMS系统中,知识表示为条件语句或以下形式的规则:
IF: A and B are true,
THEN: C is true.
规则的前提称为前提或左侧(LHS),结论称为动作或右侧(RHS)。
推理机制可以有多种形式。它经常被称为控制结构或推理控制,以反映系统有不同的控制策略。例如,一组规则可以链接在一起,如下例所示:
If A, then B (Rule 1)
If B, then C (Rule 2)
A (Data)
.'.C (Conclusion)
这被称为前向链接或数据驱动推理,因为已知的数据(在此例中为A)驱动规则从左到右的推理,规则链接在一起以推断出结论。
实现前向链接很困难,因为当规则库变大时,前向链接的原生算法会变得非常慢,因为每次循环对工作内存中的事实所做的更改很少。Rete是解决此问题的非常高效的机制。Rete在确定特定数据相关的规则方面比等效的嵌套if/then/else或select/case构造更有效。Rete网络在每次规则触发后会自行修改,以避免触发不必要的规则。规则数量越多,Rete相较于过程代码的优势就越大。
前向链接规则应用的一个例子是根据申请人的年龄、婚姻状况和驾驶记录来确定汽车保险保费。
知识库和推理引擎相互分离,以便于维护。毕竟,在大多数情况下,知识和策略会随着时间而变化,并且在添加新规则时,你不希望重写推理引擎(程序代码)。
从策略到规则
将业务策略和流程翻译成IT应用程序代码的过程传统上非常容易出错,并且通常是业务用户、分析师和应用程序开发人员之间争论和烦恼的根源。尽管存在多种文档和创作工具以及应用程序设计和建模软件和工具,但该过程充满危险,主要源于沟通的差距。
业务和IT之间的关系常常充满误解、沮丧甚至敌意。IT组织与业务部门之间这种脱节的一部分是两个部门工作周期之间的自然差异,信息会经过不同的阶段,并且在每个阶段都容易出错。
最后,当应用程序经过测试但业务功能不符合预期要求时,问题就变成了哪一方应负责,因为此时用户和分析师无法理解应用程序开发人员和设计师所使用的语言。
基于规则的处理以不同的方式缓解了这些问题。
- 用于规则存储库或知识库的自然语言和类似英语的语法支持,以及业务规则的版本控制,共同作用,以降低甚至消除传统软件开发过程中的风险。
- 通过能够将业务规则定义为独立于应用程序代码,应用程序不必了解规则条件或因匹配的规则条件而执行的操作。
- 基于规则设计的另一个好处是,您可以让业务人员看到规则,并允许他们修改或定义新规则。
业务语言支持在减少应用程序开发中涉及的各个群体之间的沟通问题方面发挥了最大的作用。如前所述,规则存储库创建了一个单一位置,所有业务逻辑和规则都存储在那里。这减少了,如果不是几乎消除了,在系统和验收测试过程中常见的错误更正过程。能够从规则开发工具内部测试和调试规则也是解决此问题的重要方面。
何时使用规则引擎?
显然,并非所有应用程序都应该使用规则引擎。在传统信息系统中,业务策略被硬编码到应用程序中;如果我们考虑使用规则引擎,那么代码更改可能会导致重大的经济损失;一行代码的简单更改可能会使组织损失数千美元。
当需要进行更改时,整个软件开发生命周期必须重新启动——理解需求,将其设计到系统中,确保它不会对其他任何东西产生不利影响,实现更改,对其进行测试,然后部署。当您可以使用声明式方法而不是命令式编程语言来表达逻辑时,引入错误的几率会大大降低。
启用应用程序的规则
Smart Rules Lite 是一个免费的规则引擎。它适用于.NET 2.0框架,使用Rete算法来评估您编写的规则。Smart Rules Lite允许您以声明式方式表达业务逻辑规则。您可以使用Smart Rules Studio编写规则,这是一个用于创建和维护业务规则语法的“一站式”解决方案。其可视化界面使开发人员和业务人员可以轻松地定义和部署新规则,或发布现有规则的新版本。
需要解决的问题
本文展示了如何将Smart Rules Lite作为示例.NET Web应用程序的业务逻辑层的一部分。以下假设为应用程序解决的虚构问题设定了场景:
- 一家名为ABC的公司是《迈阿密先驱报》、《奥兰多哨兵报》、《洛杉矶每日新闻》和《纽约时报》的报纸经销商。
- 该公司使用一个简单的Web应用程序,该应用程序根据购买的物品数量计算报纸订单的总成本,应用折扣,并在报纸运往原报纸所在地州时添加销售税。如图2所示。
- 目前,该逻辑是应用程序编译代码的一部分。包含此逻辑的组件是用兼容的.NET语言编写的。
- 应用折扣的逻辑每月更改一次以上。每次开发人员需要将其实现到代码中时,都必须经历一个繁琐的过程。
一旦问题这样提出,解决方案就变得清晰:业务策略的表达和更改它们的能力需要与实现它们的技��分离,允许
- 业务策略专家使用他们最熟悉的方法和词汇来管理和演进业务策略。
- 技术专家使用最适合他们任务的方法和词汇来管理和演进技术。
由于该公司在对分配折扣的逻辑进行计算机更改时会产生高昂的成本,因此ABC高管已命令工程师构建将业务策略从软件中抽象出来的系统,以便它们可以直接编写、修改和管理,而独立于底层软件系统。这就是BRMS(在此例中是Smart Rules Lite)发挥作用的地方。
目前,在对新订单应用折扣时必须遵循以下业务规则:
If Quantity ordered is Greater than or Equal To Quantity for Discount
then provide a discount.
在此演示中,从佛罗里达州、加利福尼亚州和纽约州订购了120份和50份《迈阿密先驱报》。初始规则在订购100份或更多报纸时应用折扣。
图3显示了响应;可以看到,购买120份或200份报纸时,每份报纸有20%的折扣。
下一张图显示了计算价格的规则。
图2显示税率为0%;对于下一条规则,如果报纸运往报纸业务所在州,则税率将设置为8%。请遵循帮助文件中的说明创建一个新规则(复制规则集并从上下文菜单中添加一个新规则)。
图5显示了Smart Rules Studio中剩余的规则。正如您可能猜到的,这些规则与税率的分配有关。
首先,请注意这些规则的执行顺序很重要。结果受这些规则触发顺序的影响。如果您查看图4和图5中详细的业务规则,您会注意到分配折扣的规则的优先级属性(在属性网格中)具有优先顺序。
现在已经将新规则添加到规则集中,我们可以检查应用程序的结果。请注意,发货地是加利福尼亚州,而“洛杉矶每日新闻”也是运往该州的。
可以看到,加利福尼亚州的税率现在是8%。
样本到此结束。代码可从上述链接下载。另外,您应该从Kontac网站下载免费的BRMS Smart Rules Lite。
请按照readme.html文件中的说明将XML字典和规则集导入到您的新存储库中。
结论
使用规则引擎可以显著降低实现应用程序中业务规则逻辑的组件的复杂性。正如您所见,这种方法更有可能易于维护。
我们通过Smart Rules Lite演示了一个简单的应用程序作为解决方案,并介绍了基于规则编程的概念,包括这些规则如何在运行时解析。