利用流水線改進代碼中的if處理流程

來源:互聯網
上載者:User

本文用到的程式設計語言為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,進行更多的判斷,然後這個方法越來越長,越來越難以讀懂,越來越難以維護,越來越。

我想是不是可以換個角度,不是訂單來判斷條件,然後執行一些代碼。而是訂單進入一個處理流程,然後處理流程中有很多的閘門,每個閘門代表一個特徵條件處理器,然後由這個處理器來判斷流經自己的訂單是否符合條件,符合就處理,不符合就掠過。

這樣有幾個好處:

上面代碼中的擷取訂單方法,不會越來越長,這樣閱讀起來就很好理解,在後面進行維護的時候,就很容易來做了。

添加一個新的條件處理分支也很容易,只要把這種條件處理看做是一個閘門,在處理流水線中加入新閘門就可以了,其他的都不需要變化。

調整原來的條件處理,也只需要修改閘門內部的處理代碼即可,不用擔心是否影響其他處理分支。

分支獨立之後,還可以針對每個分支做單元測試。

其實擴充開來想,這個流程不僅可以處理訂單,任何針對一個對象進行流程化處理的情境,都可以套用上面的代碼結構,都可以得到上面的好處。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.