2009-09-05 67 views
1

在我的程序(編輯和插補數據的控制檯應用程序)中,我賦予用戶以多種不同方式提供數據字典的能力:製表符分隔的文本文件, Excel工作簿或數據庫中。該字典由幾個(12-15)文件/表/表格組成。我試圖想出一個很好的方法來將來自各種源的數據加載到數據庫中。從.NET中的文件驗證數據

到目前爲止,我的解決方案一直使用存儲庫來隔離各種數據源,並讓這些存儲庫吐出映射到我的域模型上的DTO。我使用Builder模式來控制整個事件序列。

每個文件/片/表事件的基本上的序列是:

  1. 從存儲庫
  2. 驗證在DTO的
  3. 然後
    • 如果所述信息獲取的DTO數據是好的,映射域實體
    • 否則保留錯誤的運行列表。

我的問題是這樣的:我試圖找出其中最好的地方是驗證在DTO的信息?一種可能的解決方案是在DTO上增加一個接口,就像這樣

public interface IValidate 
{ 
    void Validate(); 
    bool HasErrors { get; } 
    IEnumerable<string> GetErrorMessages(); 
} 

這對DTO來說太重了嗎?驗證是否應該發生在別的地方?對不起,如果這有點主觀。

+3

什麼是DTO? (鏈接是OK) – 2009-09-05 12:36:39

+1

我認爲「數據傳輸對象」來自馬丁福勒的PoEAA;) – TheVillageIdiot 2009-09-05 12:43:41

+0

是的,它在這裏:http://martinfowler.com/eaaCatalog/dataTransferObject.html – TheVillageIdiot 2009-09-05 12:44:22

回答

1

我無法明確地回答你的問題,因爲如你所說,這個問題似乎是主觀的,任何答案最終都會是一個意見。這聽起來像是你真的在基於DTO的「學術」定義而不是某種實用要求的設計決策中掙扎。我們都去過那裏。

當面臨類似的情況時,我通常傾向於以最簡單直接的方式執行實現,因爲我可以避免複雜的緊密耦合關係和過多的設計。這樣,一旦我能夠讓所有的東西都能正常運轉,我可以從那裏獲得更少的影響。

總的來說,這聽起來像是你在構建某種ETL系統。我不知道你在處理什麼平臺,但是如果你使用的是SQL Server你看過SQL Server Integration Services嗎?它有很多構造來處理Office文檔,XML和平面文件等數據源。

無論如何,祝你好運與你的鬥爭。

+0

ETL =提取,轉換和加載? http://en.wikipedia.org/wiki/Extract,_transform,_load – 2009-09-05 14:52:18

+0

感謝Daniel的回答,但我只是想把信息(在這種情況下是數據字典)放到我的程序中,以便我可以使用它。該程序是一個批量編輯和插補系統,與ETL根本沒有任何關係。 – 2009-09-05 21:42:34