2009-09-05 63 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