1

車輪の再発明はしたくありません。

以下のワークフローに適合する設計パターンまたはパターンはありますか。アイデアは、すべてに適合する一般的なソリューションを用意することです: LOAD DATA --> CONVERT IT --> WRITE THE CONVERTED

お気に入り:

(1) LOAD DATA : DataSource からデータをロードし、IEnumerable を生成します。

(2) COVNERT LOADED DATA - ロードされたデータをウォークスルーし、変換ロジックで TConverted 型に変換します。

(3) WRITE CONVERTED DATA - IEnumerable をウォークスルーし、各項目を .txt ファイルに書き込みます

4

3 に答える 3

1

「テンプレート メソッド」パターンは、さまざまな種類のデータに対してこのプロセスを実装するために使用できる汎用フレームワークを構築するのに役立ちます。次のような抽象基本クラスがあります。

public abstract class ETLProcess {
    public final runETL() {
        IEnumerable rawData = extract();
        IEnumerable tranformedData = transform(rawData);
        load(transformedData);
    }

    protected abstract IEnumerable extract();
    protected abstract IEnumerable transform(IEnumerable rawData);
    protected abstract load(IEnumerable transformedData);
}

そして、ETLProcessクラスを拡張することで、さまざまな種類のデータのプロセスを実装できます。このパターンの利点は、抽象クラスでプロセスを定義でき、個々のステップが具体的なクラスで定義されることです。共通コード、共通エラー処理などを基本クラスに入れることができます。

于 2012-10-16T14:39:33.167 に答える
1

MSDN でC# .NET 4.0 を適切に実装したPipelines パターンを信じています。

アイデアは、ステージを抽出し、ステージごとに TPL の新しいインスタンスをスケジュールし、インスタンスを介して中間キャッシュとしてTaskすべてを結び付けることです。BlockingCollection<T>

また、参照されている MSDN ペーパーで言及されていることにも注意してください。 BlockingCollection.GetConsumingEnumerable()は必要に応じて返さIEnumerable<T>れます。

一般的なフローの例:

ここに画像の説明を入力

于 2012-10-16T12:19:05.717 に答える
0

Adapterパターンを探していると思います。私はしばしば変換を、クライアントにも適応者にも依存しない中間クラスと考えます。ラッパーのアイデアは、常に非常に抽象的に「感じる」とは限りません。ただし、受信データをクライアントが期待するものに適応させるように特別に設計されたクラスを作成するのがおそらく最善です。抽象化に違反していると思われる場合は、基本クラスまたはインターフェイスを作成し、受信データの詳細に合わせてそれらを実装することを検討してください。

于 2012-10-16T13:26:06.440 に答える