Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 批处理和批量处理模式_Design Patterns_Batching - Fatal编程技术网

Design patterns 批处理和批量处理模式

Design patterns 批处理和批量处理模式,design-patterns,batching,Design Patterns,Batching,我已经从数据库中查询了数据,看起来非常像下面的 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

我已经从数据库中查询了数据,看起来非常像下面的

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++等等……< /p> < p>我不确定我是否已经理解了你想要达到的,但是我认为你需要做的是:

  • 从数据中获取
    站点的不同值
  • 对于在上一步中获得的每个值
    2.1. 实例化站点
    2.2. 获取
    文件的所有相关值
    并处理每个值
  • 在C#使用LINQ时,它会是这样的:

    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);
        }
    }
    

    我将有一个visitor对象,其中包含一个哈希表,该哈希表遍历每个条目

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


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

    我赞同每个站点都有一名工作人员的想法

    另一个问题是应用程序状态


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

    不能使用任何类型的循环…这是y我发现迭代器模式是最好的工作…你也可以显示相同内容的非linq版本。。。