1

我从数据库查询的数据看起来很像以下

Job Site    File    List
-------------------------------
1   SiteA   file2.txt   2
2   SiteB   file2.txt   2
3   SiteA   file23.txt  23
4   SiteC   file2.txt   2
5   SiteB   file12.txt  12
6   SiteA   file29.txt  29
7   SiteB   file28.txt  28

我应该为每个站点(站点 A、B 和 C)启动实例,然后进行处理,例如,对于站点 A,处理 file2.txt、file23.txt 和 file29.txt。这种“处理”可以按某种顺序发生,但必须是一个接一个(不是同时的)。

所以我的第一个任务是整理站点 - 并为每个站点创建实例。我该怎么做呢?

PS:我认为对于处理部分,我应该使用某种迭代器模式...我更喜欢任何现代编译器语言的解决方案...例如 c#、vb、c++ 等...

4

3 回答 3

0

我不确定我是否了解您想要实现的目标,但我认为您需要做的是:

  1. Site从您的数据中获取不同的值

  2. 对于在上一步2.1中获得的每个值。实例化站点
    2.2. 获取所有相关值File并处理每一个

在使用 LINQ 的 C# 中,它会是这样的:

var siteNames=data.Select(d => d.Site).Distinct();
foreach(var siteName in siteNames) {
    var site=new Site(siteName); //Or use a factory method, a sites list, etc
    var files=data.Where(d => d.Site==site).Select(d => d.File);
    foreach(var file in Files) {
        site.ProcessFile(file);
    }
}
于 2009-11-18T10:00:27.337 回答
0

我会有一个带有哈希表的访问者对象,它遍历每个条目。

对于每个条目: - 如果它不存在于哈希表中,则访问者对象将为它实例化一个站点。- 然后对象将获取文件并处理它。

这样做的好处是您可以一次性完成分组和处理。

于 2009-11-18T10:06:34.073 回答
0

我赞同为每个站点配备一名工作人员的想法。

另一个问题 - 应用程序状态。

当您的应用程序启动时,它是否关心之前发生的事情?当一些文件已被处理时,考虑应用程序崩溃。重新启动时,应用程序可能会再次处理文件?那是问题吗?

于 2009-11-18T11:46:09.687 回答