浏览 3281 次
锁定老帖子 主题:请教怎么把计价类的程序写好。。。。
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-09-14
事情是这样的,我们的项目(注意是项目,意味着不同的地方有不同的需求)是一个MIS,里面涉及到计价。这个计价不幸由小弟编写。 第一版程序很快出来,很简单,只需要设置收费依据,收费依据相关的属性,收费方式,与收取金额,然后再给各种业务关联上各种各样的收费,就可以在不同的业务中按预先关联好的收费项目中收费。在测试的时候,工作得挺正常的。给第一个地方使用的时候没什么问题,很好,很强大。 因为另一个地方也需要同样的功能,不过需求有点不同,于是给加了一个功能,就是在真正计价之前,弹出一个对话框,让用户自行选择按哪种收费项目收费。因为之前的程序是没有GUI的,这次总不能弹出一个CMD窗口来吧,于是就把窗口加上,并且写上相应的代码。这是第一次变更,不是很大。 第三个地方也开始用这个模块了。他们又提出,因为在不同的地点做的业务收取的费用也是不同的……寒。因为之前没考虑到同一个地方收费也是不同的,所以没有这方面的设置,于是又给加上。又一次变更,也不是很大。 现在第四个地方也来了……这次提出的问题更BT,是一个无法正交分解的收费方式。 现在正在头疼着。问题的原因就在于,这个计价程序把容易变的逻辑部分写死在程序当中。因此,每次变更一个需求,就得改一次代码。 对于这个问题,如果用规则引擎的话,似乎有点杀鸡用牛刀。因为这个功能只能算是一个易用性的需求,不是一个关键的需求,并且我们的项目并不是基于Java的,JBOSS Drools之类的东西也应用不上。 所以想问大家,有没有什么办法,能让我把计价的规则提取出来,写成一个别的配置文件。这样以后需求变更起来就不需要去更改代码了。 PS:在opera下貌似无法发帖。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-09-14
脚本语言?
|
|
返回顶楼 | |
发表时间:2007-09-14
这个问题是脚本语言和非脚本语言基本没有什么差别。
问题的关键在于,现在计价的逻辑表现在一堆的if else里面。不论是用脚本语言还是用非脚本的语言,都免不了写一堆的if else。 虽然说if else是一定要用的,但是最好是通过某些配置文件,让程序自己去if else,而不需要人自己去写if else。 |
|
返回顶楼 | |
发表时间:2007-09-14
林杰杰 写道 这个问题是脚本语言和非脚本语言基本没有什么差别。
问题的关键在于,现在计价的逻辑表现在一堆的if else里面。不论是用脚本语言还是用非脚本的语言,都免不了写一堆的if else。 虽然说if else是一定要用的,但是最好是通过某些配置文件,让程序自己去if else,而不需要人自己去写if else。 让程序去if else?那么也许你该使用strategy模式,利用多态来消除条件语句。你这边只是一个地方有这么一个规则,况且这个规则也是不需要业务人员去修改的吧?规则引擎就算了,如果确实需要业务人员去修改,那么内嵌一个脚本解释器(比如ruby),定义DSL处理也不错。 |
|
返回顶楼 | |
发表时间:2007-09-14
strategy模式估摸也用不上。因为各种计价规则之间并无明显的继承关系。比如说A业务登记费用与B业务登记费用其实并不存在多大的关系。
内嵌一个ruby解释器可能可以,但是其实就是把用C语言写的代码换成用ruby写了而已,省去了编译分发的过程。 定义DSL可能是一个可行的方法。 所以就请问大家一下,在这个领域的DSL定义上,有没有可以让小弟借鉴的经验? |
|
返回顶楼 | |
发表时间:2007-09-14
规则?提取出来?根据楼主的描述,规则本身都在不停的进化,要想“提取”出来,除非楼主对客户业务非常熟悉,预先了解他们的规则变化,然后就可以花几个月写一套“通用”的可制定规则的计价程序。不过这个“通用”能维持多久就不知道了。
所以我建议楼主能则修修补补,不能就重新设计。 |
|
返回顶楼 | |
发表时间:2007-09-15
你第四种无法正交分解的是什么意思?详细描述出来看看。
加个决策表,这个在上万种计价逻辑也搞得定。从你前面描述的业务来看, 决策表很适用你说的, 而且这个决策表是个相当小的决策表 |
|
返回顶楼 | |
发表时间:2007-09-17
我说的无法正交分解,指的是在原本的设计中显得很别扭。
原来的设计很简单,基本上像下面那个: foreach(收费 in 所有收费项目) foreach(物品 in 所有物品) 计价(收费,物品) endfor endfor 现在出现了一些收费方式,没办法应用到上面的那个循环中去。 关于那个决策表的,我以前没有接触过。等我去了解一下什么叫决策表先,嘿嘿。 |
|
返回顶楼 | |
发表时间:2007-09-17
林杰杰 写道 我说的无法正交分解,指的是在原本的设计中显得很别扭。
原来的设计很简单,基本上像下面那个: foreach(收费 in 所有收费项目) foreach(物品 in 所有物品) 计价(收费,物品) endfor endfor 现在出现了一些收费方式,没办法应用到上面的那个循环中去。 关于那个决策表的,我以前没有接触过。等我去了解一下什么叫决策表先,嘿嘿。 你这个不用太复杂的决策, 关系型的决策就行,用1个矩阵决策足够了,这么简单也没必要按照范式分解。 (因素A, 因素B, 因素C, ……,因素N, 计价算法(或者算法标志) ) |
|
返回顶楼 | |
发表时间:2007-09-20
@ zengjin8310:
关于这个决策表,这几天我百度了几下,都没找到什么有用的资料。不知道在哪里可以找到这方面的资料呢? ^_^ |
|
返回顶楼 | |