我目前正在設計一個處理不同類型文件的系統。我已經定義了以下接口可以處理錯誤的組件的異常或返回狀態
public interface IFileProcessor
{
bool ProcessFile(string fileContents)
}
目的是創建一些具體的實現來處理不同的文件類型。控制器類將負責:
- 看一個文件夾中新添加的文件
- 一個呼叫ProcessFile(讀取文件內容
- 獲得這些IFileProcessor具體實現
- 一個集合)傳遞文件內容
- 如果某個組件無法處理該文件,則返回false,否則將處理該內容並返回true
- 如果沒有IFileProcesso r實現可以將它由控制器移動到「未處理」文件夾的文件
- 如果某個組件成功處理該文件,則該文件將被移動到「已處理」文件夾中
- 如果某個組件拋出異常,移動到「失敗」文件夾
我創造IFileProcessor的實現將首先檢查它是否可以根據類型處理該文件(即csv),然後執行一些頂級驗證(即校驗文件頭)。如果這些檢查中的任何一個檢查失敗,將拋出控制器的異常,因爲整個文件被視爲無效。
但是,一旦頂級驗證成功,組件將處理文件中的每一行。從這一點開始,一條生產線可能無法處理(即驗證),並且其餘的過程繼續進行。
這是問題出在哪裏,我想知道是否最好記錄發生了驗證錯誤,然後在進程結束時拋出異常,或者更改ProcessFile()簽名以返回枚舉(一個已處理的,未處理的,已處理的錯誤)?
從我看過的文章看來,異常是狀態代碼的首選路線,但是在這種特殊的情況下,一個進程可以繼續下去,在最後使用一個人爲的異常來聲明進程沒有完成似乎是錯誤的100 %。
我會真正感興趣的人民對此的想法。
不要過度設計這個。當文件出現問題時,你需要一個人來採取行動。沒有什麼有意義的事情可以做,它可以是好的或不可用的。只要確保這個人有一個清晰的診斷看看。 –
嗨漢斯,在這種情況下的要求是,組件必須處理它的一切。文件中的每一行都會經過驗證過程,檢查該行中的引用是否爲我們的系統所知。如果已知該參考線,則處理線,否則將記錄驗證錯誤以供稍後進一步檢查。 – watsite