2016-12-16 65 views
0

所以,想象一下面條代碼。任務應該從1到2然後到3等。如果任務中斷,則中止程序。我可以用程序的方式寫這個,但想知道是否有這樣的設計模式。設計模式來處理瀑布處理

我看着責任鏈,但它並不適合。我已經知道哪個進程應該處理每個任務。主/工不適合,因爲它需要逐步處理。手頭

具體問題是 - 允許用戶上載的Excel文件,比較文件,數據庫表結構,然後更新數據庫。

步驟將是:

  1. 上傳文件 - 驗證文件上傳,如果沒有,返回。
  2. 驗證該文件是否爲excel文件,如果沒有,則返回。
  3. 將文件讀入數據表中,如果出錯,返回。
  4. 從數據庫中獲取數據庫,如果有錯誤,返回。
  5. 將每個數據表加載到相應的2D數組中,如果出錯,返回。
  6. 比較如果每個陣列具有相同的列數,如果錯誤,則返回。 等etc etc ...

有沒有一種方法可以使用這種設計模式?謝謝。

+3

誰需要設計模式?對他們毫無神聖感。編碼您的問題,以滿足您的要求。這聽起來像是一連串的轉變,每個人都可以拋出異常並爆發。感覺像一個明顯的lambda給我。 – duffymo

+0

沒有一個簡單的'goto'不會修復。 – MickyD

+0

對我而言,面向對象的語言如Java和C#不適合數據處理。注意:這只是一個說法,不是對您的具體問題的回答。 –

回答

0

有是一種解決這種情況的設計模式,它是衆所周知的:Pipeline或MSDN稱之爲Pipes and Filters Pattern。請注意,它不是着名的Gang of Four design patterns的一部分,它甚至可以是架構模式。

通過較小的獨立級(或過濾器)進行數據的一個大的處理時它主要用於:

此圖案用於算法中,數據流經任務或階段的 序列。

使用PipelineProcessing圖案: 問題由 執行計算的序列,其中的每一個可以被分解 分解成不同的階段,對輸入序列,使得對於每個 輸入的計算必須按順序進行,但也可以爲不同的輸入作爲 在激勵部分中的數字指示的不同階段的 重疊計算。

MSDN:

使用時這種模式:

  • 由應用所需的處理可以很容易地分解成一組離散的,獨立的步驟。
  • 應用程序執行的處理步驟具有不同的可伸縮性要求。

enter image description here

enter image description here

通過使用這種模式,您可以執行通過更小的獨立(因此也更容易管理)的步驟你的過程中,也許並行化其中的一些,從而達到更好的性能,甚至每個步驟(過濾器)都有不同的實現,並使用諸如故障策略或每個步驟的驗證等方式輕鬆進行自定義。

0

設計模式能很好的模式,但不一定直觀地發展。我認爲這個問題屬於直觀的發展。

這是我怎麼會攻擊它......

在僞

bool DoTheWork(file) 
{ 
    if (!IsUploaded(file)) 
    return false; 
    if (!IsExcel(file)) 
    return false; 
    if (!WriteToDataTable(file)) 
    return false; 
    .... etc 
    return true; 
} 

有可能有些誤差在嵌套函數,即某一時刻趕上...

bool WriteToDataTable(file) 
{ 
    try 
    { 
    // Details to write to your database 
    } 
    catch (e) 
    { 
    errorLogging(e); 
    return false; 
    } 
    return true; 
} 
+0

謝謝,我知道如何在程序上做到這一點。我認爲有一個OOP模式可以啓動。 –