2012-07-26 84 views
1

我的應用程序有許多模塊和原有的業務流程是這樣的:如何處理替代業務流程

甲 - >乙 - 「ç - > d

隨着應用的增長,備選流被添加以滿足客戶的需求:

A - >乙 - 「ç - > d

A - >乙 - > C」 - > d(C現在可以執行可選的操作)

A - > d

A - > d」(d現在能夠執行C的可選操作)

的單元測試用例的數量和QC的手動測試火箭。

電流I有2個解決方案:

  1. 靜默創建B,C從A給它d之前,那麼我可以保證輸入到d數
  2. 跳過B,C,調整輸入d到一箇中介類型和寫入適配器轉換的A - >介導型

所選擇的解決方案必須低於目標滿足:

  • 靈活的業務(客戶)
  • 高處理性能
  • 維護(源代碼)

我不知道哪一個,我應該使用或有任何更好的解決方案。

回答

1

首先,我不完全確定我理解你的問題,所以讓我說出我的假設,然後提供我的答案。必要時適應。

假設:

  • 你的業務流程模型操作的集合。例如:A可能是結賬步驟,C和C'是兩個不同但相似的付款步驟。
  • 每個過程步驟在公用數據集的不同部分上運行。例如:B計算總計和折扣(對購物車內容進行操作),C和C'獲取總計並啓動某種付款。
  • 您希望儘可能保持原有實現的完整性。

如果是這種情況,我會確保我對我的數據模型有正確的理解,並且每個步驟的哪些部分可以運行,然後圍繞此建立一個狀態機。

優點:

  • 您的每個過程的步驟可以使用一個或多個國家進行建模。您確保轉換基於數據模型。您可以根據用戶使用Paypal付款或兌換憑證的決定,決定是否將用戶轉換到適當的狀態來處理此問題。
  • 各州可以單獨進行測試。單元測試將很容易編寫,您可以爲面向客戶的功能構建線束以進行手動測試(例如與支付提供商進行集成測試)。
  • 狀態機通常佔用空間很小。它們通常是事件驅動的,因此可以在應用程序中保持線程數減少。如果狀態只包含邏輯並僅對數據對象進行操作,則甚至可以在不同的併發進程間重複使用狀態實例。這取決於你的狀態機框架。

事情要記住:

  • 在你的狀態明確,並有許多小國進行小型專用操作。如果決定使用卡支付或優惠券,則將其設爲僞狀態。
  • 避免上帝對象(即包含知道所有事物的對象)。如果狀態開始在大部分域模型上運行,請考慮改進模型或狀態機
  • 確保使所有事件都是事件驅動的並且是異步的。同步狀態機不會擴展。如果您正在調用不是異步的服務,請爲其構建一個包裝器。

我已經成功地在先前的項目中使用了這種建模業務流程的方法。這是最終用戶可以購買物品的流程。我們需要處理大量替代流程,例如在不同的支付方式之間切換,在後端系統不可用時重試等等。

爲了滿足我們的需求,我們推出了自己的狀態機框架。你應該看看你的平臺有什麼可用的。

1

這聽起來像你需要一個工作流系統。您可以構建各個組件並獨立測試它們,然後使用工作流程系統將它們連接到每個客戶的配置中。

Windows Workflow和任何Java BPM軟件都適合該任務。

+0

感謝您的建議,但我正在使用的應用程序已經5年了,因此我無法選擇新技術。 – 2012-07-30 04:04:02

+0

您通常可以將抽象放在系統中的任何邊界上。我們最近已經將Windows Workflow與一個應用程序集成在一起,這個應用程序有15年的COM和9年的.NET。 – pointyhat 2012-08-09 16:07:32