关于复杂任务与异常处理的设计模式探讨!

04-06-04 slant
各位大侠目前我在项目中遇到了这样一个问题,

现在把我的想法提出来探讨一下:

[项目情况]

有一类复杂的任务是由A,B,C,D,E...不同子任务组成的。

它们之间具有关联性,即执行完了A后才能执行B

它们之间不具有不可重复性,即执行完了A之后不能再执行A

并且任务有多个组合,也就是说:

任务1:Task1=A+B+C+D

任务2时:Task2=B+C+D+E

还有一个情况就是Task1执行时会产生异常

比如A后产生了异常,系统将会终止Task1,

产生新任务Task1new=B+C,(因为A任务不能重做)

[我的思考]

采用Builder模式,可以解决Task1,Task2不同产品类问题。

但,当执行Task1(A)产生异常时后续任务(B+C)将会成为一个新的产品类。

如此整个系统本来只有两个产品类现在由于异常会变成数个。

有没有更好的解决方案呢?

希望得到指点,thx!

    

ajoo
2004-06-05 04:48
不要想pattern,直接做,随时refactor就是了。

关于你这个问题,我觉得你的描述不是很清楚,没有讲清楚问题。

比如,任务的关联性是否是个问题?是否有维护关联性的考虑?还是硬编码进去?

再比如,task1里面的失败了,你转而继续执行B,C等,那么不就是等于在每个task里面对每个子任务catch(Exception)吗?不是说必须A执行完了才能执行B?可是A失败了,怎么还继续执行B呢?所谓创建一个新的task1new,是什么意义?

子任务是否还有子任务?

等等等等。

所以现在谈pattern还太早。先把需求的matrix或者spec写出来吧。

banq
2004-06-05 10:54
我初步推定,你这是个过程性较强的流动性应用,推荐使用状态机或状态模式实现过程的总监控,这样灵活性较大,当然可以辅助以Builder模式。

状态模式是工作流之类的应用的核心、总控制室,当然你的好像不是纯工作流,但是有些特征。所以有以上建议。

slant
2004-06-05 16:30
回ajoo:

我这个项目主要是金融方面的,所以考虑的异常情况很多。

A+B+C+D这些任务相互关联(它涉及数据库、文件生成、文件加解密、文件上传等)

事实上A完成后在进入B之前或之后都是要考虑服务器断电,死机这种极端异常的。所以它们具有连贯性和不可重复性。

另外,我这个处理框想可扩展性强一些。

因为初始只考虑了一种复杂任务,现在又加入了另一种复杂任务,不知以后还会不会有新的:(

slant
2004-06-05 16:33
回板桥兄:

的确我这个项目过程性较强,类似于工作流。

《状态机或状态模式实现过程的总监控》还没有涉及过,我研究几天再来。

thx!

猜你喜欢
2Go 1 2 下一页