私は最近、特定のタイプのファイルをモデル化するいくつかのオブジェクトを含むクラスライブラリを作成しました。たとえば、Document
派生クラスPdfDocument
(concrete)とOfficeDocument
(abstract、WordDocument
andなどの具体的な派生クラスを持つ)などの抽象クラスがありますExcelDocument
。
現在、クライアントが新しいオブジェクトを作成する方法は、適切な派生クラスを選択し、それにバイト配列を渡すことです。したがって、たとえば、PdfDocumentとWordDocumentのバイト配列がある場合は、次のようにします。
var wordDocument = new WordDocument(wordDocumentByteArray);
var pdfDocument = new PdfDocument(pdfDocumentByteArray);
これは許容できる設計であり、クライアントは使用する派生クラスを知っている必要がありますか?または、抽象クラス以外のすべてを非表示Document
にし、抽象ファクトリパターンなどを使用して正しい派生型を返す方がよいでしょうか。例えば:
var wordDocument = DocumentFactory.GetDocument(wordDocumentByteArray, "docx");
// pass file extension so we know what the file is
派生型は、抽象クラスに追加のプロパティ/メソッドを追加するのではなく、さまざまな方法で抽象メソッドを実装するだけであることに注意してください。