2010-11-12 60 views
0

我有一個要求,我有一組作業要從屏幕執行(每個作業可能需要幾個小時才能執行),我需要制定一些規則來執行這些作業。它可以用圖表來表示。哪種設計模式適合此工作流程要求?

  1. 每個職業都有一個序列號和作業應該在序列
  2. 然而,有一組可以在任何順序執行的工作和他們每個人都可以有自己的路徑來執行。例如一旦A和B完成,D,E,F可以按任意順序運行,但是可以有一條規則,像G只能在D完成後才能運行,H只能在E完成之後運行。
  3. 如果其之前的任何並行作業成功,則可以運行一些作業。如果作業是A,B,C,D和A,則B,C可以按任意順序運行,只有在A或B或C完成時才能運行D.
  4. 只有完成所有前面的並行作業,才能運行一些作業。在上面的例子中,如果A和B和C完成,可以運行規則D如果A和B和C完成
  5. 有一些檢查點,這意味着一旦檢查點作業完成,以前都不能重新運行,包括檢查點作業。

不知怎的,我需要能夠表達一個可以在運行時評估的工作條件。例如E =(A和B)或(C和D);這意味着如果A和B成功或者C和D成功,則作業E可以運行。

幾乎總結了不同類型的規則,我的問題是,是否有我可以用來實現這個設計模式?理想情況下,我希望將此工作流保存在數據庫中,並基於此驗證是否允許作業運行。窗口工作流可能是一個矯枉過正的,我正在尋找更簡單的解決方案,可能不是最好的,但需要更少的時間。使用

技術:ASP.NET 3.5,C#3.0,SQL Server 2008中

回答

0

我解決了這個問題,將這些作業依賴關係存儲在樹形格式的表格中,並使用遞歸函數對其進行評估。可能不是最好的,但它可以工作和配置。

0

玉以及我不認爲你有實現使用簡單,直接的設計模式,你有這麼多的執政規律的要求。您可以使用多種設計模式的組合來達成良好的設計。

但是,看着你的要求,我認爲你可以使用template pattern。這種設計模式將允許您定義程序框架 - 行爲和順序。但是,既然你有其中序列可以改變或可發生並行處理的其他一些規則 - 模板模式可用於覆蓋算法步驟,通過子類或模板模式,讓不同的行爲可以用一個鉤子來跳過某些步驟和誘導不同的行爲。

我只是想大聲這裏,你將不得不仔細權衡您的要求和檢查,如果這是你實現最好的設計模式。

0

每個職業都有一個序列號 和就業應 序列

這對我來說執行指示,你需要一個隊列添加您的作業。我首先找到Priority Queue的實現,並採用它來了解隊列中的所有其他作業,並根據該作業分配優先級。這將確保它們都按正確的順序運行,具體取決於它們的「類型」。

相關問題