Welcome

首页 / 软件开发 / C# / 利用流水线改进代码中的if处理流程

利用流水线改进代码中的if处理流程2014-03-20本文用到的编程语言为C#,具体思路不限制编程语言。

刚才正在浏览http://ruby-china.org/topics/7384的时候,看到5楼的回复,突然有一种想法,不知道优劣,请大家帮忙评判一下,或者给出一些更好的实现方案。

我们先来上一段代码,就是常见的一种代码。

Order getOrder(string orderNo) {order = repo.getOrder(orderNo);if(order.condition1) {... }if(order.condition2) { ... }if(order.condition3) { ... }. . .}
上面是一段伪代码,实现的就是一个根据订单号,获取订单,然后根据订单的一些条件进行一些处理。

order是获取出来的订单,condition1、condition2、condition3是一些条件。随着业务的复杂,condition3后面还可能更多的condition,就需要添加更多的if,进行更多的判断,然后这个方法越来越长,越来越难以读懂,越来越难以维护,越来越。

我想是不是可以换个角度,不是订单来判断条件,然后执行一些代码。而是订单进入一个处理流程,然后处理流程中有很多的闸门,每个闸门代表一个特征条件处理器,然后由这个处理器来判断流经自己的订单是否符合条件,符合就处理,不符合就掠过。

这样有几个好处:

上面代码中的获取订单方法,不会越来越长,这样阅读起来就很好理解,在后面进行维护的时候,就很容易来做了。

添加一个新的条件处理分支也很容易,只要把这种条件处理看做是一个闸门,在处理流水线中加入新闸门就可以了,其他的都不需要变化。

调整原来的条件处理,也只需要修改闸门内部的处理代码即可,不用担心是否影响其他处理分支。

分支独立之后,还可以针对每个分支做单元测试。

其实扩展开来想,这个流程不仅可以处理订单,任何针对一个对象进行流程化处理的场景,都可以套用上面的代码结构,都可以得到上面的好处。