我目前正在构建一个Web应用程序,它将从数据库中获取一些信息,并用该信息替换Word文档中的一些文本。然后文档将保存到预定义的位置。
现在的问题是,当开发开始时我们讨论的是5个文档,但现在我们正在考虑20个以上,文档可能会随着时间而改变。我的初步想法是为每个文档“硬编码”类。但现在这似乎是一个非常愚蠢的想法。
该方法的签名可能类似于:void Generate(string template, string outputFileName);
。这是如何以最好的方式完成的?假设我创建了一个接口IGenerator
,它定义了Generate方法和一些描述当前“插件”的方法。我可以简单地将.cs文件(或dll)与在某个目录中实现该接口的单个类放在一起,然后让应用程序找到所有这些并让用户选择一个吗?
Document
类的好方法,而无需使用所有类重新编译整个应用程序或库?我希望每个文档类都能代表它自己。我读过这个article,这可能是我最好的选择?
感谢。
答案 0 :(得分:0)
我会考虑使用工厂模式来生成文档实例,如果需要处理不同的文档类型,那么考虑使用Document
抽象类来公开可重写的方法,以便从文档中获取数据。
然后编写代码来处理Document
类而不是特定的子类,因为代码的其余部分不关心文档是什么,只是处理文档。
然后,您需要实现一个Document
子类来处理不同的文档类型(Word .doc,.docx; Excel,Text等),并使用{生成正确类的实例{1}}传递变量的工厂,以确定创建正确的Document
子类。
如果您要在任何时间存在多个文档,那么您可以将它们的实例存储在Document
中。
修改强>
根据你到目前为止的说法,这是我的想法。 您实际上只处理Office文档,因此您可以使用Office SDK,在这种情况下,您需要加载适当的库,或者如果您坚持使用Open XML格式文档,您可以自己生成它们。
有关Office文档格式的信息,请查看here。
在任何情况下,您都会处理Word文档或Excel文档,但您可能有多个Word文档的布局。
如果您编写文档类以接受某种类型的模板信息,那么您可以将其以XML格式存储在数据库中或配置文件中。
如果存储在配置文件中,则将其作为数据源从List<Document>
引用,例如
web.config
通过这种方式,您可以对<appSettings datasource="different.config"/>
中存储的appSettings
进行更改,而无需重新启动您的网页。