我目前正在原型软件,它必须能够生成不同类型的文件格式不同的文件。文档可以是信函,也可以是收据,例如,作为Word文档、PDF或两者兼而有之。
我使用的是一个Word和PDF库,每个库都有各自的API。每种不同类型的文档可以有许多不同的布局和格式,包括自定义字体、图像、页眉和页脚。
我希望设计尽可能抽象,避免每种新类型的文档、布局和文件格式的具体实现呈指数增长。
首先,我认为我应该将PDF和Word文档API抽象为一些更通用的API。我觉得适配器模式最合适。例如,我可能有一个名为DocumentAdapter的接口,其中有两个名为PdfDocmentAdapter和WordDocumentAdapter的具体实现。
然后,我希望能够构建任何类型的文档,任何格式,任何布局。因此,我已经开始设计一个具有两个依赖项的DocumentBuilder类:一个文档适配器和一个文档规范。规范应该定义文档的布局,并且文件格式不可知。
DocumentBuilder将有一个名为BuildDocument的具体方法,它为适当的适配器和规范构建文档,然后将其写入文件系统。
问题是构建Word和PDF文档的API非常不同,我真的不知道如何最好地解决这个设计问题。
我可以拥有类似于LetterDocumentInterface -> PdfLetterDocument、WordLetterDocument、StandardPdfLetterDocument、ShortPdfLetterDocument、StandardWordLetterDocument、ShortWordLetterDocument之类的东西,但这会导致大量的具体类。
任何关于建造类似设计的提示或经验都将不胜感激。
发布于 2015-01-08 14:24:11
几年前,当我面临类似的挑战时,我使用了DocBook。有可用于生成PDF、Word、HTML和其他输出格式的翻译程序。
我在这方面遇到了一些困难。
我最终开发了转换器来生成Word (OOXML)文档、PDF (生成Apache )文档和HTML。结果很好看。然而,到了这个时候,火车已经离开了车站,这个项目再也不能等我把这些东西发展到强健的程度了。
回顾过去,我建议使用类似于DocBook的简化文档格式,并使用XSLT生成不同格式的内容。然后,注入样式表可以满足您的其他需求。
https://softwareengineering.stackexchange.com/questions/269433
复制相似问题