使用Java脚本构建强大、灵活的公式管理系统
在很多中大型的应用中,如SCM(供应链管理)、CRM(客户关系管理)和ERP(企业资源计划)等,使用者往往要根据自身的需求,灵活的对某一些参数值进行变更,使得按照某固定公式计算的结果符合目前的情况。如不同时期商品价格的折扣率需要根据实际情况进行调整,或者职员的奖金百分比要根据公司的业绩而定。这就需要有一个强大的公式管理机制来对一些参数进行灵活调整。
前言
客户的需求是在不断变化的。虽然他们说现在他们公司的职员奖金应该就是按照那个公式计算,但是过了几个月他们会告诉你这个公式并不是很合理,还需要加一些参数。你可能会说,这个没问题,我们可以改程序。但是当这样的变更不是一次一个的发生,而是频繁的、大量的出现时,你也许就在想应该有一个公式管理系统来完成这些琐碎却很重要的变更了。是的,在很多系统中已经这样做了。这里将介绍一种简单的、易扩展的公式管理系统,它采用简单灵活的BeanShell脚本机制,并且结合JDOM技术来实现。在阅读本文以前,你需要对BeanShell和JDOM有所了解。
BeanShell简介
BeanShell 是一种Java 解释器,它包含的脚本语言基本与Java 语言兼容,具有体积小、简单、符合Java 风格等特点。本文不是介绍BeanShell的语法和用法,而是基于BeanShell脚本实现一个公式管理器来说明BeanShell的强大脚本功能,从而简化Java程序员的编程工作,使他们更深入的了解什么时候使用BeanShell技术将使得构建的系统更灵活。你可以阅读参考资料了解更多 BeanShell的知识。类似的Java脚本技术还有DynamicJ等,想要详细了解它们的更多信息,请查阅后面的参考资料。(请注意:这里的 Java脚本不是Javascript。)
JDOM简介
JDOM使得用Java操作xml文件更轻松。这里使用xml文件格式对用户的自定义公式库进行存储,即简单又容易管理。利用JDOM技术,能够简单、快速的完成这个任务。如果你想详细了解有关JDOM的知识,请查阅文章后面的参考资料。
公式管理系统的目标
公式管理系统实现的主要目标是:用户可以根据自己的需要自定义公式,包括添加、修改和删除公式或者公式包含的参数;提供接口使得用户或其它系统能够利用公式库中的公式进行计算求值。从以上系统的主要功能,可以知道该系统主要包含两个用例:自定义公式和计算表达式。自定义公式是用户预先定义好某公式包含的参数(包括参数名、参数类型等),然后将这些参数用运算符按照一定的法则组合成所需要的公式。公式定义好后,将被保存到公式库中,供以后用户或其它系统计算时调用。这是管理者根据自身的需求,灵活更改公式或公式包含的参数的系统功能;计算表达式是用户给相应参数赋值,然后指定要遵照的公式进行计算求值。这是该系统提供给使用者的外部接口。一般的,使用者只需要提供要遵照的公式ID和相关的参数值,就可以调用该接口进行计算。该系统的用例图如下:
图1. 公式管理系统用例图