xls ソース (ole db) からデータをロードし、出力ファイルの仕様に従ってフォーマットし、処理されたフィールドをマージして、csv に保存するなどの作業を完了する必要があります。
特定のタイプでなければならないデータの複数のフィールドを処理する方法は? 特定の方法でフォーマットされている - など
この問題のクラス構造を抽象化するのに苦労しています。
どのデザインパターンが私に最も適していますか?
xls ソース (ole db) からデータをロードし、出力ファイルの仕様に従ってフォーマットし、処理されたフィールドをマージして、csv に保存するなどの作業を完了する必要があります。
特定のタイプでなければならないデータの複数のフィールドを処理する方法は? 特定の方法でフォーマットされている - など
この問題のクラス構造を抽象化するのに苦労しています。
どのデザインパターンが私に最も適していますか?
最初はデザインパターンを考えることはしませんが、少なくとも最初は問題をより小さな部分に分解します。
さて、あなたの説明は、実際の処理について実際に詳しく説明するには少し曖昧かもしれませんが、そこから少なくとも 3 つの部分を特定できます。
ファイルやストリームを処理する方法と同様に、リーダーとライターの両方を考えたいと思うかもしれません。たとえば、リーダーには次のようなものがあります。
Open
Read
(1項目だけ読んでください)Close
ライターについても同じですが、Write
.
との 2 つのインターフェイスを抽象化し、IDataReader
インターフェイスを介してのみ、リーダーとライターの両方と対話しますIDataWriter
。IDataProcessor
これらのコントラクトを配置することは、プロセッサがそれぞれを解決するための内部的な方法について心配する必要なく、などのリーダーXLSReader : IDataReader
とライターの 1 つの実装を持つことができることを意味します。CSVWriter : IDataWriter
これらの抽象化を使用すると、(他の部分をモックすることによって) 各部分を分離して、クリーンで独立した単体テストを作成できます。これにより、開発中のすべてのステップをテストできます。
また、これらのタイプのコントラクトでは、1 つの大きなデータ (大きなDataTable
ものなど) ではなく、小さなパケットでデータを処理したり、進行状況を測定したりできます。
現在、実際の要件に応じて、リーダーが提供するデータ型のスキーマまたは定義を使用できます。これは、入力データを変更して出力を構築する出力、フォーマッター、およびトランスフォーマーと同じです。