CN103577178A - 一种灵活修改计算规则的方法和系统 - Google Patents
一种灵活修改计算规则的方法和系统 Download PDFInfo
- Publication number
- CN103577178A CN103577178A CN201210274105.7A CN201210274105A CN103577178A CN 103577178 A CN103577178 A CN 103577178A CN 201210274105 A CN201210274105 A CN 201210274105A CN 103577178 A CN103577178 A CN 103577178A
- Authority
- CN
- China
- Prior art keywords
- computation rule
- application system
- concrete application
- module
- interface
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明名称为“一种灵活修改计算规则的方法和系统”,涉及软件系统的计算规则的灵活修改技术领域。本发明公开了一种灵活修改计算规则的方法和系统结构,可以在不改动具体应用系统的情况下,在具体应用系统以外修改计算规则而改变具体应用系统的计算逻辑。基本原理是将计算规则与使用计算规则的具体应用系统解耦,如此可以避免传统的将计算规则硬编码进具体应用系统的方法所带来的每次修改计算规则都要重新测试发布具体应用系统的麻烦。
Description
技术领域
本发明涉及软件系统的计算规则的松耦合和灵活修改。
背景技术
“与业务相关的操作规范、管理章程、规章制度、行业标准等,都可以称为业务规则(Business Rules,简称BR)。业务规则实质上也可以理解为一组条件和在此条件下的操作,是一组准确凝练的语句,用于描述、约束及控制企业的结构、运作和战略,是应用程序中的一段业务逻辑。该业务逻辑通常由业务人员、企业的管理人员和程序开发人员共同开发和修改。它的理论基础是:设置一个条件集合,当满足这个条件集合时候,触发一个或者多个动作。”[百度百科对业务规则的解释]
软件应用领域的计算规则属业务规则的一种,通常由一组逻辑条件和在此条件下的一个或者多个数学计算组成,当满足了某个逻辑条件时就触发某个数学计算。这组逻辑条件通常形式化地表述为一组形如“如果…,则…,否则…”的逻辑语句,为了描述方便,我们将这组逻辑条件定义为“逻辑规则”。这里说到的数学计算通常是一组或简单或复杂的数学表达式,同样为了描述方便,我们将这组数学计算命名为“数学规则”。当满足“逻辑规则”中的某个逻辑条件时触发“数学规则”中某个数学计算。所以在某种意义上可以将计算规则简化为:“计算规则”=“逻辑规则”+“数学规则”。
逻辑规则又由“如果”、“则”、“否则”三部分组成。“如果”条件成立后,执行“则”逻辑分支,这个逻辑分支可以是一个数学规则,也可以是另一个逻辑规则。否则执行“否则”逻辑分支,同样这个逻辑分支可以是一个数学规则或另一个逻辑规则。
“如果”逻辑中的逻辑条件由多个“条件项”和“逻辑关系运算符”组成,“条件项”与具体应用系统相关,要从具体应用系统提供的条件项数据接口中得到。
“数学规则”由多个“计算项”和“数学运算符”组成,“计算项”与具体应用系统相关。
在软件系统中,计算规则通常由一系列抽象的程序语句实现。传统应用系统中的计算规则是硬编码进系统的,这带来如下难题:
1)计算规则是硬编码进软件系统的,计算规则的每次修改,哪怕是很小的一点儿修改,都是对该软件系统的修改,都要经历软件开发周期的主要流程,参与的角色多,耗费的周期长。
2)有些系统有些改进,把逻辑规则中的常量和数学规则中常变的加权系数等参数值写入数据库或配置文件中供调整修改,为计算规则的修改提供了一定灵活性,但这种灵活性非常有限,只能限制在修改常量和系数的范围,不能修改逻辑和计算公式。
3)计算规则语句分散在软件系统各处,这种分散导致修改维护起来容易遗漏出错。
以上难题归根结底是由计算规则硬编码进软件系统中引起的,如图1所示。解决思路是找到一种方法,使软件系统本身不再维护计算规则,计算规则写在软件系统外,软件系统调用外部的计算规则进行计算。
发明内容
提供本发明内容是为了以简化的形式介绍将在以下具体实施例中进一步描述的一些概念。本发明内容并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限定所要求保护的主题的范围。
针对传统计算规则开发维护过程中存在的上述诸多问题,本发明在对计算规则和实现方法进行了深度抽象、分析、归纳后,提出了具体应用系统用统一接口的方式调用定义在系统外的计算规则,这样通过统一接口可以调用计算规则的不同实现模块,达到在具体应用系统外灵活变更计算规则的目的,克服了上述计算规则实现难题。
参考图2,能灵活修改计算规则的方法就是,具体应用系统201不再负责计算规则逻辑,而是将计算规则逻辑分离到具体应用系统201外边的计算规则系统202中单独管理。计算规则系统202对外提供计算规则调用接口203供具体应用系统201调用完成计算,计算动作由具体应用系统201发起,而实际由计算规则系统202完成。具体应用系统201对外提供2类接口供计算规则系统202调用:条件项数据接口组204和计算项数据接口组205,这2类接口负责解释计算规则系统202中计算规则的条件项和计算项符号。
能实现这个方法的应用系统,与传统应用系统相比,结构特点如下,参见图3:
系统结构由具体应用系统301和计算规则系统302两大部分构成。具体应用系统301可以是任何应用领域和技术结构的应用系统。计算规则系统302的技术结构应追随具体应用系统301的技术结构,以减低调用难度。
具体应用系统301负责完成应用领域的具体业务功能,计算规则系统302负责为具体应用系统301提供具体计算规则。
具体应用系统301负责不是本发明的主体,只是为了更清晰描述本发明与具体应用系统301的关系才提及。其中与本发明相关的是计算模块304、具体应用系统的数据存储305和对外提供的2类接口:条件项数据接口307和数据项数据接口308。
计算模块304,其中并没有计算规则,只是调用计算规则接口,负责发起计算动作。
具体应用系统的数据存储305,是具体应用系统301中的数据存储机制,它的主体功能是为具体应用系统301存储和提供业务数据。此外,它还要在计算规则模块310运行时,为条件项数据接口307和计算项数据接口308分别提供条件项数据和计算项数据,以使计算规则模块310能正常执行得出正确计算结果。
条件项数据接口307,由计算规则系统302中的计算规则模块310调用,负责解释计算规则模块310中的条件项符号,并在运行时为计算规则模块310提供条件项数据。它为每个条件项提供一个“读()”方法,由具体应用系统301内部实现,负责向具体应用系统301外部提供条件项服务,具体有2个作用:
a)在计算规则模块生成器309生成计算规则模块310时,负责为计算规则模块310中的逻辑规则中的条件项脚本符号提供定义;
b)在计算模块304调用计算规则调用接口306执行计算规则模块310时,负责为计算规则模块310中的逻辑规则中的条件项提供数据,这个数据是单向的,只从具体应用系统数据存储305中读出到条件项数据接口307;
每个具体应用系统301有1个或多个条件项数据接口。因为计算规则中的逻辑规则的条件项与具体业务相关,因此不同应用系统301的条件项数据接口数量和定义各不相同。
计算项数据接口308,为每个计算项提供一个“读()”方法,为每一个出现在数学规则赋值语句左侧的计算项提供一个“写()”方法,由具体应用系统301内部实现,负责向具体应用系统301外部提供计算项服务,具体有2个作用:
a)在计算规则模块生成器309生成计算规则模块310时,负责为计算规则模块310中的数学规则中的计算项脚本符号提供定义;
b)在计算模块304调用计算规则调用接口306执行计算规则模块310时,负责为计算规则模块310中的数学规则中的计算项提供数据,这个数据是双向的,有从具体应用系统数据存储305中读出到计算项数据接口308的,也有从计算项数据接口308写入到具体应用系统数据存储305的;
每个具体应用系统301有1个或多个计算项数据接口。因为计算规则中的数学规则的计算项与具体业务相关,因此不同应用系统301的计算项数据接口数量和定义各不相同。
计算规则系统302是本发明主体,负责灵活修改计算规则的方法和机制的具体实现,负责为具体应用系统301提供具体计算规则。为了使其具有灵活修改计算规则的能力,其中提供了一个计算规则模块生成器309,并在其边界处定义了1个供外部调用的计算规则调用接口306。
计算规则调用接口306,负责为具体应用系统301内部的计算模块304提供统一的调用接口来按外部定义的计算规则模块310所定义的计算规则进行计算。该接口只提供一个或多个不同参数的“计算()”方法,由位于具体应用系统301以外的计算规则模块310具体实现;
计算规则模块生成器309,负责将各种逻辑的计算规则脚本311加工成计算规则模块310。输入是计算规则脚本311,输出是计算规则模块310。计算规则脚本311只包含了描述计算规则业务逻辑的程序代码,并不是完整的计算机程序模块,不能被直接解释或编译。计算规则模块生成器309需要给计算规则脚本311加上适当的程序头和程序尾才能将其包装成完整的计算机程序模块。此外,如果具体应用系统301是编译型系统,计算规则模块生成器309还要负责将这个刚包装完的完整的计算机程序模块编译为动态链接库。因为不同的应用系统301对计算规则模块310有不同的技术和业务限制,因此不同的应用系统301的计算规则模块生成器309给计算规则脚本311加上的程序头和程序尾也不相同。
计算规则脚本311,位于计算规则系统302的边界处,是描述计算规则的业务逻辑的程序脚本,负责提供具体计算逻辑,可用手写313生成,也可借助某种计算规则脚本生成器312辅助快速生成。因为不是完整的程序模块,只包含计算规则的业务逻辑代码,因此不能直接解释或编译执行。计算规则脚本311中用到的条件项和计算项的脚本名称和参数必须与具体应用系统301定义的条件项和计算项数据接口307和308一致。
计算规则模块310,位于计算规则系统302以内,由计算规则模块生成器309加工而成,既包含了计算规则脚本311,又是完整的可执行的程序模块。如果具体应用系统301是解释型系统,则计算规则模块310以可直接解释执行的脚本形式提供。如果具体应用系统301是编译型系统,则计算规则模块310要以动态链接库的形式提供。计算规则模块310中用到的条件项和计算项必须与具体应用系统301定义的条件项和计算项数据接口307和308一致。在外部的计算规则模块310运行时,要通过具体应用系统301内部提供的条件项和数据项数据接口307和308调用具体应用系统数据存储305提供的数据。
这个结构的特点和优点是计算由具体应用系统301内部的计算模块304发起,但计算规则和实际计算发生在具体应用系统301以外的计算规则模块310处,这样每次修改计算规则时,改变的只是外部的计算规则模块310,具体应用系统301不发生变化,具体应用系统301不用再为计算规则的修改而经历冗长的软件修改、测试、发布周期,在具体应用系统301不变的情况下计算规则就可以灵活改变。
附图说明
图1是计算规则硬编码在计算模块中示意图
图2是可灵活修改计算规则的方法示意图
图3是可灵活修改计算规则的系统的结构示意图
图4是计算规则脚本示例
图5是计算规则模块代码示例
具体实施方式
具体应用系统301可以是任何应用领域和技术结构的应用系统。
如果具体应用系统301是解释型的,则计算规则模块生成器309生成的计算规则模块310是完整可执行的程序脚本模块。如果具体应用系统301是编译型的,则计算规则模块生成器309生成的计算规则模块310是动态链接库。
条件项数据接口307和计算项数据接口308在实现时可直接访问具体应用系统301的数据存储305,也可以通过数据访问层访问具体应用系统301的数据存储305,可以实现为具体应用系统301的一个函数,也可以实现为web服务。
计算规则脚本311负责提供具体计算逻辑,其所用到的条件项和计算项只能来自具体应用系统提供的计算项数据接口308和条件项数据接口307。计算规则脚本311可由熟悉计算规则代码的程序员通过手写313生成或修改,或由业务人员或技术人员借助于某种计算规则脚本生成系统312快速生成或修改。
计算规则脚本311示例参考图4,使用C#.net写的脚本,其中用到的条件项和计算项如下:
条件项:
会员积分MemberCumulativePoint
优惠活动CouponActivity
买家好评数PraiseNumberFromBuyer
计算项:
优惠券数量CouponNumber
优惠券面值CouponParValue
优惠金额CouponMoney
商品标价StandardPrice
折扣价BargainPrice
计算规则模块生成器309负责将包含计算逻辑的计算规则脚本311包装成完整可执行的计算规则模块310。如果具体应用系统301是解释执行的,则计算规则模块生成器309在计算规则脚本311的头前和尾后补充相关代码生成完整的可解释执行的计算规则模块310。如果具体应用系统301是编译执行的,则计算规则模块生成器309除了在计算规则脚本311的头前和尾后补充相关代码生成完整的可执行程序外,还负责将其编译为可运行时调用的动态链接库。
计算规则模块310示例参考图5,这个示例是以图4所示的计算规则脚本为基础的。
如果是新实现具体应用系统301,则首先分析其中的计算规则,抽象出条件项和计算项,写出计算规则脚本311,然后在具体应用系统301内增加计算项数据接口308和条件项数据接口307来解释计算规则模块310中出现的计算项和条件项脚本符号,并在具体应用系统301内实现这2类接口来对计算规则模块310提供来自具体应用系统数据存储305的数据。同时,增加计算模块304,在具体应用系统301以内增加计算规则调用接口306和计算规则模块生成器309,并在具体应用系统301以外用计算规则模块生成器309实现计算规则调用接口306,实现的结果就是计算规则模块310。以后在具体应用系统301外修改计算规则脚本311就能改变具体应用系统301所用的计算规则了。
如果是要改造已经存在的具体应用系统301,使其变成支持可灵活修改计算规则的系统,则需改造原来的计算模块304,剥离其中的计算规则逻辑,其它的都与新实现具体应用系统301的步骤一致。
一旦计算项和条件项确定,就可以开发和实现计算项数据接口和条件项数据接口,并可以在已有的计算项和条件项范围内任意修改计算规则而不用改动具体应用系统。但是当计算规则需求变化很大,需要用到原来没定义过的计算项或条件项,就要先开发和实现新计算项数据接口和新条件项数据接口,经过测试发布,然后才能在计算规则中使用新计算项和新条件项,然后就可以在现有的计算项和条件项范围内任意修改计算规则而不用改动具体应用系统。
计算规则系统302基于通用体系结构的计算机系统实现,其可执行代码保存于计算机系统的硬盘,加电启动后表现为寄存器中的一系列计算机指令,控制计算机系统按计算规则完成计算。
计算规则系统302可用多种计算机语言实现,包括但不限于Java、C#、Ruby、PHP等常见语言。
Claims (6)
1.一种灵活修改计算规则的方法,特征为:
具体应用系统201不再负责计算规则逻辑,而是将计算规则逻辑分离到具体应用系统201外边的计算规则系统202中单独管理,计算规则系统202对外提供计算规则调用接口203供具体应用系统201调用完成计算,计算动作由具体应用系统201发起,而实际由计算规则系统202完成。
2.如权利要求1所述方法,特征在于:
具体应用系统201对外提供两组接口供计算规则系统202调用:条件项数据接口组204和计算项数据接口组205,条件项数据接口组204负责解释计算规则系统202中计算规则的条件项符号,并在运行时为条件项提供数据,计算项数据接口组205负责解释计算规则系统202中计算规则的计算项符号,并在运行时为计算项提供数据。
3.一种灵活修改计算规则的系统结构,特征为:
系统结构由具体应用系统301和计算规则系统302两大部分构成,具体应用系统301负责完成应用领域的具体业务功能,计算规则系统302负责为具体应用系统301提供具体计算规则,具体应用系统301可以是任何应用领域和技术结构的应用系统,计算规则系统302的技术结构应追随具体应用系统301的技术结构,以减低调用难度。
4.如权利要求3所述系统,特征在于:
具体应用系统301提供计算模块304、具体应用系统的数据存储305和2组接口(条件项数据接口307,计算项数据接口308),计算规则系统302提供计算规则模块生成器309和计算规则调用接口306,以及计算规则脚本311和计算规则模块310。
5.如权利要求4所述系统,特征在于:
计算模块304调用计算规则接口306来激活计算动作,但计算透过计算规则接口306实际发生在具体应用系统301以外的计算规则模块310中;具体应用系统的数据存储305主要负责应用领域的数据存储,同时兼顾为条件项和数据项数据接口组307和308提供数据;条件项数据接口组307负责解释计算规则模块310中的条件项符号,并在运行时为计算规则模块310中的条件项提供数据;计算项数据接口组308负责解释计算规则模块310中的计算项符号,并在运行时为计算规则模块310中的计算项提供数据;计算规则接口306为具体应用系统301提供计算规则的统一调用接口,由计算规则系统302的计算规则模块310实现,计算规则接口306只提供一个或多个不同参数的“计算()”方法,由位于具体应用系统301以外的计算规则模块310具体实现;计算规则模块生成器309负责生成计算规则模块310,计算规则模块生成器309在计算规则脚本311的头尾各加入适当代码,使新生成的计算规则模块310实现计算规则调用接口306;计算规则模块310是可直接执行的计算逻辑,由计算规则模块生成器309从计算规则脚本311生成;计算规则脚本311负责具体的计算逻辑,手写生成或借助脚本生成器312辅助生成,它只包含了描述计算规则业务逻辑的程序代码,并不是完整的计算机程序模块,不能被直接解释或编译,计算规则脚本311中用到的条件项和计算项的脚本名称和参数必须与具体应用系统301定义的条件项和计算项数据接口组307和308一致。
6.如权利要求4所述系统,特征在于:如果具体应用系统301是解释型系统,则计算规则模块310被计算规则模块生成器309包装成完整可执行的代码单元。如果具体应用系统301是编译型系统,则计算规则模块310还要被计算规则模块生成器309编译为动态链接库。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210274105.7A CN103577178A (zh) | 2012-08-03 | 2012-08-03 | 一种灵活修改计算规则的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210274105.7A CN103577178A (zh) | 2012-08-03 | 2012-08-03 | 一种灵活修改计算规则的方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103577178A true CN103577178A (zh) | 2014-02-12 |
Family
ID=50049030
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210274105.7A Pending CN103577178A (zh) | 2012-08-03 | 2012-08-03 | 一种灵活修改计算规则的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103577178A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108255490A (zh) * | 2016-12-28 | 2018-07-06 | 平安科技(深圳)有限公司 | 一种硬编码的处理方法及装置 |
CN110688172A (zh) * | 2019-09-27 | 2020-01-14 | 南京博联智能科技有限公司 | 设备功能互斥逻辑配置方法、装置、电子设备及存储介质 |
CN110737524A (zh) * | 2019-10-18 | 2020-01-31 | 北京思维造物信息科技股份有限公司 | 一种任务规则管理方法、装置、设备及介质 |
-
2012
- 2012-08-03 CN CN201210274105.7A patent/CN103577178A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108255490A (zh) * | 2016-12-28 | 2018-07-06 | 平安科技(深圳)有限公司 | 一种硬编码的处理方法及装置 |
CN108255490B (zh) * | 2016-12-28 | 2021-11-26 | 平安科技(深圳)有限公司 | 一种硬编码的处理方法及装置 |
CN110688172A (zh) * | 2019-09-27 | 2020-01-14 | 南京博联智能科技有限公司 | 设备功能互斥逻辑配置方法、装置、电子设备及存储介质 |
CN110688172B (zh) * | 2019-09-27 | 2023-11-03 | 南京博联智能科技有限公司 | 设备功能互斥逻辑配置方法、装置、电子设备及存储介质 |
CN110737524A (zh) * | 2019-10-18 | 2020-01-31 | 北京思维造物信息科技股份有限公司 | 一种任务规则管理方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109144515B (zh) | Dcs图形化算法组态的离线仿真方法和装置 | |
US20150199787A1 (en) | Distribute workload of an application to a graphics processing unit | |
CN113826070A (zh) | 工作流引擎工具 | |
Patil et al. | Formal Verification of IEC61499 Function Blocks with Abstract State Machines and SMV--Modelling | |
CN101243412A (zh) | 用于安全检查模块中的可执行应用程序的系统、方法和计算机程序产品 | |
CN103577178A (zh) | 一种灵活修改计算规则的方法和系统 | |
Rasch et al. | dOCAL: high-level distributed programming with OpenCL and CUDA | |
Nastov et al. | Towards V&V suitable domain specific modeling languages for MBSE: A tooled approach | |
CN108121285B (zh) | 基于连续功能图的应用软件协同编译方法及装置 | |
CN113553057A (zh) | 一种针对不同架构的gpu进行并行计算的优化系统 | |
CN102968533A (zh) | 一种液体火箭发动机通用化仿真方法 | |
CN110955411B (zh) | 一种软件集成交互设计方法 | |
CN102331961A (zh) | 并行模拟多个处理器的方法及系统、调度器 | |
CN108205596B (zh) | 实现核电厂严重事故分析计算程序仿真功能的方法 | |
CN103631585A (zh) | 一种用于开发应用程序的方法及系统 | |
Liu et al. | Consistency and refinement of UML models | |
CN103488519A (zh) | 一种交互式脚本语言解释器的实现方法 | |
CN104461566B (zh) | 一种基于对象实例的行为变体的jcop扩展实现方法 | |
Zhang | An Approach for Extracting UML Diagram from Object-Oriented Program Based on J2X | |
CN113705004B (zh) | 一种适合dsp的实时系统行为级软件仿真方法 | |
Garanina et al. | Model Checking Meets Auto-Tuning of High-Performance Programs | |
Aehle et al. | Reverse-mode automatic differentiation of compiled programs | |
Todica et al. | Formal verification in web services composition | |
Ivutin et al. | Low-level Code Auto-tuning for State-of-the-art Multicore Architectures | |
Cheung et al. | Transparent synchronous dataflow |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20140212 |