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) のインスタンスを開始し、処理を行うことになっています。この「処理」は、ある順序で発生する可能性がありますが、順番に実行する必要があります (同時ではありません)。

したがって、私の最初のタスクは、サイトを照合し、それぞれのインスタンスを作成することです。どうすればいいですか?

PS: 処理部分については、ある種の反復子パターンを使用する必要があると考えました...私は、c#、vb、c++ などの最新のコンパイラ言語でのソリューションを好みます...

4

3 に答える 3

0

各エントリを反復処理するハッシュテーブルを持つビジターオブジェクトがあります。

エントリごとに:-ハッシュテーブルに存在しなかった場合、ビジターオブジェクトはそのサイトをインスタンス化します。-オブジェクトはファイルを取得して処理します。

これには、グループ化と処理を1回のパスで実行できるという利点があります。

于 2009-11-18T10:06:34.073 に答える
0

各サイトのワーカーのアイデアを支持します。

もう 1 つの問題 - アプリケーションの状態。

アプリが起動するとき、以前に何が起こったか気にしますか? いくつかのファイルが処理されたときにアプリケーションがクラッシュしたとします。おそらく再起動時に、アプリはファイルを再度処理しますか? 問題ありますか?

于 2009-11-18T11:46:09.687 に答える
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 に答える