以企业人力资源管理系统中的招聘子系统为例,讲述如何把业务规则与程序独立开来,以适应企业业务规则的变化,全文分为了实例简述、业务规则、规则引擎和规则引擎的使用等几个部分。
1 实例简述
企业资源管理系统中会涉及到很多的企业业务流程,在这些工作流程中的工作规则就叫做业务规则。在软件开发中,一种简单的处理业务规则的方式是根据业务规则和业务流程设计软件、编写代码。但当企业要改变业务规则的时候,这些系统就必须跟着修改,实在是麻烦。企业的业务规则不可能是一成不变的,所以,把业务规则硬编码进软件代码里不是一种好的方法。应该把业务规则从程序中独立出来,使用一个专门读取业务规则并依据规则中的定义来执行业务流程的程序模块来驱动整个业务的进行,这个模块就叫规则引擎。本文以企业的人才招聘模块为例子,本例子的人才招聘模式可以是面向院校、社会或者人力资源市场等,不同的招聘对象的招聘流程和规则都可以不一样,而客户要求我们设计的软件系统要能适用于各种招聘对象和场合。
2 业务规则
规则可以以XML文件形式存储,采用XML形式的规则标记语言定义规则包中的对象以及相应的操作逻辑。根据在设计阶段得到的业务模式设计相应的业务规则,业务规则采用XML文档来存储。根据Microsoft BizTalk的规则引擎采用的规则定义文件的模式,每个模式的业务规则集用XML文档的一个元素来表示,元素包含的多个相同模式的子元素,子元素就表示业务模式的业务规则。BizTalk的规则语言是一些定义好的XML元素符号,能够用来表示各种业务规则,本文中涉及的规则的描述采用Biztalk的规则语言规范。
如招聘管理业务模式中可建立如下筛选业务规则:
业务规则1:
IF:应聘者性别为女而且学历低于专科
THEN:淘汰
该规则是人员筛选构件中初选子构件的一个业务规则,条件不成立则调用筛选构件的接口方法Bypass,并把该应聘者的号码作为参数传递。其中的inviteeObject是筛选构件中对应应聘者的业务对象。
学历编码规则要和人力资源系统的基础数据的定义相吻合,比如中专为1、专科为2、本科为3、研究生为4等。以上规则文档的条件成立时执行的操作是业务对象HRMBusinessObject中的方法Bypass,并以表示应聘者的对象PersonInvitee的Number作为参数,该方法会把不符合规则的应聘者从列表中删除。
而在设计构件中的招聘模式是融合了三种招聘流程,这三种业务流程的业务规则用三个规则集文档来表示,分别命名为xml_inviteStu、xml_inviteSoc、xml_inviteInCor。
3 规则引擎
业务规则引擎读取业务规则,根据业务规则中的条件成立与否确定是否执行对应的操作。规则引擎用事实(fact)作为规则中的左边表达式的值与规则的右边表达式的值进行比较关系运算,关系结果成立则执行规则规定的操作。其中的事实是规则所表达的系统中对应对象的相关属性,可以是数据库中表的一条记录的某个字段,或者是XML文档的某个元素或属性的值。如上面的筛选规则可以用招聘管理数据库中应聘者表中的记录作为事实,每条记录在程序中使用应聘者对象的值表示。用Mictosoft Biztalk SDK提供的规则引擎工具包可以编写规则引擎构件如下:
如每个应聘者的数据记录就是一个短期事实,所有的应聘者记录组成数组,本构件里的HRMRuleEngine类中的Execute函数要求把应聘者记录的数组名作为参数。本构件中的事实数组的大小限制在50,即本构件所能一次处理筛选业务的记录数不能多于50个(应聘者)。
4 规则引擎的使用
在项目中引用前面开发生成的程序集,包括业务规则引擎和业务逻辑层程序集。在应用项目中,首先要生成应聘者对象(Personinvitee)集(数组)。然后把这个数组作为参数传递给规则引擎,因为规则文件里已经定义好了不满足条件执行Bypass删除相应的应聘者,因此之后得到的就是满足招聘条件的应聘者了。
筛选按钮单击事件处理过程复用业务构件的业务对象inviteeFilter执行应聘人员的初选业务,其代码如下所示。
此处省略为应聘者数组元素赋值的代码!
//执行筛选业务
上述代码的最后一行,即业务类inviteeFilter的Filter方法是通过调用规则引擎的Execute方法来实现规则的应用的。
5 总结
我这里展示的实例处理的数据量太小,涉及的业务规则也太简单。采用本例展示的业务规则与程序逻辑分离的方式开发这样的应用系统,就能适应每次招聘的规则的变化。对于人力资源管理的其它模块也可以用同样的方式来开发,但前提条件是有可复用的分析、设计和物理构件存在,即必须有对应领域的领域工程的支持。关于代码的更多细节,有兴趣的话请联系我。
作者:张强 徐文昭 来源:硅谷 2012年17期
中国论文网(www.lunwen.net.cn)免费学术期刊论文发表,目录,论文查重入口,本科毕业论文怎么写,职称论文范文,论文摘要,论文文献资料,毕业论文格式,论文检测降重服务。