私は、モジュールの1つの責任がXMLファイルを解析し、データベースに必要なコンテンツをダンプすることである製品に取り組んでいます。現在の要件はXMLファイルの解析のみですが、将来、あらゆる種類のファイルをサポートできるように解析モジュールを設計したいと考えています。このアプローチの理由は、特定のクライアント向けにこの製品を構築しているが、近い将来に他のクライアントに販売する予定だからです。現在のクライアントのエコシステム内のすべてのシステムはXMLファイルを生成および消費しますが、他のクライアントの場合はそうではありません。
これまでに何を試しましたか?(現在) 戦略パターンに基づいた次の設計を念頭に置いています。私はすぐに日食でコードを書き留めてデザインを伝えたので、例外を適切に処理する方法などの他の側面が今のところ無視されるといいでしょう。
Parser:解析メソッドを公開する戦略インターフェイス。
public interface Parser<T> {
public T parse(String inputFile);
}
*ジェネリックパラメーターを使用する理由は、すべての戻り値の型を許可し、コンパイル時に型の安全性を確保するためです。
ProductDataXmlParser製品関連情報を含むproduct.xmlファイルを解析するための具象クラス。(XMLBeanを使用)
public class ProductDataXmlParser implements Parser<ProductDataTYPE> {
public ProductDataTYPE parse(String inputFile) {
ProductDataTYPE productDataDoc = null;
File inputXMLFile = new File(inputFile);
try {
productDataDoc = ProductDataDocument.Factory.parse(inputXMLFile);
} catch(XmlException e) {
System.out.println("XmlException while parsing file : "+inputXMLFile);
} catch(IOException e) {
System.out.println("IOException while parsing file : "+inputXMLFile);
}
return productDataDoc.getProductData();
}
}
ここで、 ProductDataTYPEおよびProductDataDocumentは、xsdおよびscompコマンドを使用して生成されたXMlBean POJOクラスです。
未来
将来解析されるproduct.txtファイルがある場合、ファイルの必要なコンテンツを保持するProductDataという独自のPOJOを定義できます。次に、Parserインターフェースを実装するProductDataFlatFileParserという具象クラスを作成し、ファイルを解析した後、parseメソッドにProductData POJOを設定させます。
このデザインは理にかなっていますか?この設計に明らかな欠陥はありますか?設計が成り立つと、具体的なクラスがアルゴリズムを定義してファイルを解析できるようにし、具体的なクラスにデータを入力する場所を決定させます。設計は、ファイル形式よりもドメインオブジェクトに依存しているようです。これは悪いことですか?設計を改善する方法についてのご意見をいただければ幸いです。