本文用到的程式設計語言為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,進行更多的判斷,然後這個方法越來越長,越來越難以讀懂,越來越難以維護,越來越。
我想是不是可以換個角度,不是訂單來判斷條件,然後執行一些代碼。而是訂單進入一個處理流程,然後處理流程中有很多的閘門,每個閘門代表一個特徵條件處理器,然後由這個處理器來判斷流經自己的訂單是否符合條件,符合就處理,不符合就掠過。
這樣有幾個好處:
上面代碼中的擷取訂單方法,不會越來越長,這樣閱讀起來就很好理解,在後面進行維護的時候,就很容易來做了。
添加一個新的條件處理分支也很容易,只要把這種條件處理看做是一個閘門,在處理流水線中加入新閘門就可以了,其他的都不需要變化。
調整原來的條件處理,也只需要修改閘門內部的處理代碼即可,不用擔心是否影響其他處理分支。
分支獨立之後,還可以針對每個分支做單元測試。
其實擴充開來想,這個流程不僅可以處理訂單,任何針對一個對象進行流程化處理的情境,都可以套用上面的代碼結構,都可以得到上面的好處。