在您看来,我们应该如何根据安装类型编写代码来处理启用或禁用功能。目的是为单独的版本进行单一安装,并根据安装类型提供功能。
一种方法是有条件地编译代码,但这会使代码变脏且难以维护。
在您看来,我们应该如何根据安装类型编写代码来处理启用或禁用功能。目的是为单独的版本进行单一安装,并根据安装类型提供功能。
一种方法是有条件地编译代码,但这会使代码变脏且难以维护。
您可以求助于基于插件的架构,其中所有(或大部分)功能都作为扩展核心应用程序功能的插件实现。这样,您的版本将仅在安装/运送/等的程序集方面有所不同。
当然,使用这种方法,您总是可以通过复制缺少的程序集来制作“入门”版以变成“专业版”。为了解决这个问题,您仍然必须求助于条件编译,但您必须有条件地编译负责加载这些插件的块。
例如,假设您希望为您的专业版添加导出功能。为此,您创建了一个单独的IExporter
插件接口。以下是您处理此问题的方法:
public IExporter GetExporter(FormatType format)
{
#if PROFESSIONAL_EDITION
return ExporterRegistry.GetExporter(format);
#else
return NullExporter();
#endif
}
因此,您的 Professional 版本将能够使用 custom 进行扩展IExporter
,而非 Professional 版本,即使所有“Professional”程序集都到位,也无法使用此功能。
您可以使用条件编译或 ConditionalAttribute。这是一篇解释这些主题的文章:使用条件编译构建和维护多个应用程序版本
标志是一种选择,但我想那将是“条件编译”。安装类型会设置一个标志,基于这些标志,一些代码会被执行,否则它会被忽略。
你可以有不同的代码分支吗?这样每个版本将只有该安装类型的相关代码。无需携带永远不会使用的代码。