모듈 중 하나의 책임이 XML 파일을 구문 분석하고 필요한 내용을 데이터베이스에 덤프하는 제품을 개발 중입니다. 현재 요구 사항은 XML 파일 만 구문 분석하는 것이지만 향후 모든 종류의 파일을 지원할 수있는 방식으로 구문 분석 모듈을 설계하려고합니다. 이 접근 방식의 이유는 특정 고객을 위해이 제품을 구축하고 있지만 가까운 시일 내에 다른 고객에게 판매 할 계획이기 때문입니다. 현재 클라이언트에 대한 에코 시스템의 모든 시스템은 XML 파일을 생성하고 소비하지만 다른 클라이언트에게는 해당되지 않을 수 있습니다.
지금까지 무엇을 시도 했습니까? (현재) 전략 패턴을 기반으로하는 다음과 같은 디자인을 염두에두고 있습니다. 내 디자인을 전달하기 위해 이클립스로 코드를 신속하게 작성 했으므로 예외 처리의 적절한 방법과 같은 다른 측면이 무시되는 것이 좋습니다.
파서 : 파싱 방법을 공개하는 전략 인터페이스.
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를 정의 할 수 있습니다. 그런 다음 파서 인터페이스를 구현하고 파일 구문 분석 후 구문 분석 메소드가 ProductData POJO를 채우도록 ProductDataFlatFileParser라는 구체적인 클래스를 작성할 수 있습니다.
이 디자인이 의미가 있습니까? 이 디자인에 명백한 결함이 있습니까? 디자인이 의미하는대로, 구체적인 클래스가 알고리즘을 정의하여 파일을 구문 분석하고 콘크리트 클래스가 데이터를 채울 위치를 결정할 수있게합니다. 디자인은 파일 형식이 아닌 도메인 개체에 더 의존적 인 것 같습니다. 이것은 나쁜 것입니까? 디자인을 개선 할 수있는 방법에 대한 의견을 보내 주시면 감사하겠습니다.