2009-03-09 15 views
0

私は、ドメイン駆動型開発と制御の逆転が、この場合に適用されるものです。ドメインモデルを非同期的にロードする

私は、スポーツイベントからタイミングデータをロードして視覚化できるアプリケーションを作成することに決めました(私はこの種のデータにかなりアクセスしています)。

1つの要件は、イベントの詳細(イベント後に生成されたCSV)とその一部がライブデータソースである、いくつかの異なるデータソースから選択できるようにすることです。

このデータをドメインにロードするプロセスを設計して、同期ロードと非同期ロードの両方に簡単に使用できるようにすることができません。

私は、すべてのデータソースが派生する抽象クラスが必要であると推測しています。このクラスは、(データファイルのパス、またはライブデータ・ソース・サーバーのアドレスを取得)自体を設定できるようにする必要があり、私はそれがこのような何かを見てする必要が推測:

protected abstract void Setup(); 
protected abstract void LoadData(Race race); 

public Race Load() 
{ 
    Race race = new Race(); 
    Thread t = new Thread(new ParameterizedThreadStart(LoadData)); 
    t.Start(race); 
    return race; 
} 

各データをソースは独自のセットアップメソッドを実装することができますが、これはうんざりしているように感じます。データソースクラスがダイアログを表示するというアイデアが気に入らないのは間違っているからです。

ドメインを作成する独自のLoadDataメソッドを実装することもできます。ライブソースの場合、これは長時間実行され、発生するたびにラップタイムになります。フルデータソースは、できるだけ早く。

しかし、フロントエンドはレースオブジェクトにすぐにアクセスでき、そのイベントにバインドできます。イベントを事前に設定できるように、競合オブジェクトをloadメソッドに渡す方が良いでしょうか?

このデザインがうまくいくかどうかを知りたいだけです。私にはちょっと変わった気がして、新しいものなのかどうか分かりません。私は全体のことを考えすぎるかもしれません。

答えて

1

私は、 "派生した"クラスのいくつかを書くことでこれをプログラムすると思いますが、基本クラスについて心配する必要はありません。私はその後、複製を削除するためにリファクタリングを行います。そうすれば、派生クラスを扱う前に基本クラスについて推測することはできません。

とりわけ、私は消費者が消費するデータについて消費者がどれくらい知る必要があるかを確認するために、これらすべてのクラスのコンシューマのコードを作業していることを確認しました。例えば、消費者は、負荷が完了したかどうかを知る必要がありますか?彼らはまだロードされているかもしれないデータを表示する "良い点"を見つける必要がありますか?消費者がこの情報を必要としないと判明した場合、ロードプロセスは「派生」クラスの実装の詳細になり、公に公開する必要はありません。

関連する問題