나는 다양한 파일 형식으로 임의의 양의 보고서를 작성해야합니다. 대부분의 형식에서는 템플릿을 출력하기 위해 Smarty를 사용할 수 있습니다. 그러나 Excel 및 PDF로 출력 할 때는 FPDF 나 TCPDF, PHPExcel을 사용해야합니다.보고에 대한 몇 가지 OOAD 조언을 찾고 있습니다.
가능한 경우 하나 이상의 디자인 패턴을 통해 클래스를 구성하는 가장 좋은 방법을 찾으려합니다.
출력 형식 :
- 텍스트 - 스마티 (w/PCL 형식)
- 텍스트 - 스마티
- CSV - 스마티
- HTML - 스마티
- 엑셀 - PHPExcel
- PDF - FPDF/TCPDF
이러한 형식은 스트리밍을 위해 메모리에 있거나 나중에 사용하기 위해 파일에 쓸 수 있어야합니다.
모든 보고서에서 일관성있는 유일한 점은 PDF 및 Excel 지원, 템플릿이 추가 될 때까지 데이터가 필요하다는 것입니다. 현재 getData()라는 추상 메서드가있는 Report 클래스가 있습니다. 각 하위 클래스 (예 : SpecificReport)는 필요한 데이터를 가져 와서 템플릿 등의 바인딩을위한 클래스 속성에 저장합니다.
각 보고서는 모든 형식으로 제공되어야합니다.
보고서 클래스는 현재 출력을 처리하지만 Excel 및 PDF에 대한 지원을 추가하면 불가능합니다. Smarty와 같은 템플릿에 데이터를 바인딩하는 것 이상의 의미가 있습니다. 각 보고서에는 특정 코드가 필요합니다. 각 보고서 하위 클래스에서 이러한 메서드를 오버로드 할 수 있다고 가정합니다.
비슷한 작업을 한 사람이 있습니까?
나는 이것이 좋은 패턴/아이디어라고 생각한다. 가장 어려운 부분은 Excel 및 PDF 형식의 중간 단계를 만드는 것입니다. 모든 템플릿을 Excel 파일이나 스트림에 쓰는 ExcelWriter 형식 클래스를 만들려는 경우 기본적으로 이러한 태그에 태그 스키마와 인터프리터를 만들어야합니다. 이 패턴은 내가 처음에 생각한 것이지만 방금 언급 한 것에 의해 저지되었다고 생각합니다. 어쩌면 나는 그것을 더 쉽게 원할 수도있다. =) –
태그 체계와 해석기를 사용하지 마십시오. 중간 보고서에 개체 그래프를 만듭니다. 그런 다음 렌더러에서 개체의 그래프를 읽고 보고서로 변환합니다. –
에서 PofEAA Fowler는 화면 사이에 공통점이 거의없는 경우이 패턴이 제대로 작동하지 않는다고 말합니다 (우리의 경우 보고서). 그게 여기에 적용됩니까?보고서 데이터는 모두 동일하지만 해당 보고서의 코드를 사용하지 않고 완전히 별도의 출력을 만드는 데 사용할 수있는 중간 상태 (개체 그래프)를 구상하는 데 문제가 있습니다. 원형 보고서 개체는 PDF와 Excel 형식간에 충분히 다를 수있는 것처럼 보입니다. 나는 정말로이 아이디어가 마음에 든다. 나는 그것이 나를 위해 어떻게 일할 수 있는지에 관해 머리 글자를 쓰려고 노력하고있다. –