これが私のシナリオです。ユーザーが私のソフトウェアでドキュメントを選択すると、私のソフトウェアがドキュメントからいくつかの重要なデータを抽出します。ソフトウェアは2種類のフォーマットを処理します。PDFとDOCX。これらのタイプごとに、いくつかのテンプレートがあり、アップロードされたドキュメントはこれらのテンプレートの1つに属していると想定されます。これがよく知られた問題であるかどうか、そしてこのシナリオを解決するための確立されたデザインパターンが存在するかどうかはわかりません(そのため、私はSOを使用しています)。これまでに私が設計したものは次のとおりです。
テンプレートごとに特定の構造/コンテンツがあるため、テンプレートごとに個別のクラスを作成することを考えています。IExtractorと呼ばれるトップレベルのインターフェイスがあり、次にPdfExtractorとDocxExtractorと呼ばれる2つのトップレベルのクラスがあり、それぞれがIExtractorインターフェイスを実装します。すべてのPDF(またはDOCX)テンプレートに共通する機能はすべて、これらの親クラスに入ります。
これらの2つの親クラスの下には、テンプレートごとに1つずつ、いくつかのテンプレートクラスがあります。たとえば、PdfExtractorを継承するTemplate571_PdfExtractorというクラスには、テンプレート571に固有のメソッドがありますが、他のエクストラクタと同じ形式で結果を提供します。
それが重要な場合は、C#4.0を使用しています。スケルトンは次のとおりです。
インターフェース:
interface IExtractor
{
void ExtractDocument(System.IO.FileInfo document, dsExtract dsToFill);
}
2つの親クラス:
public class DocxExtractor : IExtractor
{
public virtual void ExtractDocument(System.IO.FileInfo document, dsExtract dsToFill)
{
}
}
public class PdfExtractor : IExtractor
{
public virtual void ExtractDocument(System.IO.FileInfo document, dsExtract dsToFill)
{
}
}
具体的なクラスの1つ:
public class Template571_PdfExtractor : PdfExtractor
{
public virtual void ExtractDocument(System.IO.FileInfo document, dsExtract dsToFill)
{
}
}
今、私がよくわからないいくつかの重要な質問があります。それらはすべて、具象(テンプレート)クラスのオブジェクトをインスタンス化する方法と場所がわからないという問題を中心に展開しています。ファイル拡張子を使用して、PdfExtractorツリーノードまたはDocxExtractorノードのどちらを下に移動する必要があるかを判断できます。その後、ユーザーのドキュメントが属するテンプレートを教えてくれるのはファイルの内容です。では、この「決定」コードはどこに置くのでしょうか。私のアイデアは、それをPdfExtractorクラス(または、さらに言えばDocxExtractor)に入れることでした。それは正しい方法ですか?
少し長くなって申し訳ありませんが、自分の状況を完全に説明する方法がわかりませんでした。あなたのアイデアをありがとう。
Shujaat