2

在您看来,我们应该如何根据安装类型编写代码来处理启用或禁用功能。目的是为单独的版本进行单一安装,并根据安装类型提供功能。

一种方法是有条件地编译代码,但这会使代码变脏且难以维护。

4

3 回答 3

3

您可以求助于基于插件的架构,其中所有(或大部分)功能都作为扩展核心应用程序功能的插件实现。这样,您的版本将仅在安装/运送/等的程序集方面有所不同。

当然,使用这种方法,您总是可以通过复制缺少的程序集来制作“入门”版以变成“专业版”。为了解决这个问题,您仍然必须求助于条件编译,但您必须有条件地编译负责加载这些插件的块。

例如,假设您希望为您的专业版添加导出功能。为此,您创建了一个单独的IExporter插件接口。以下是您处理此问题的方法:

public IExporter GetExporter(FormatType format)
{
#if PROFESSIONAL_EDITION
    return ExporterRegistry.GetExporter(format);
#else
    return NullExporter();
#endif        
}   

因此,您的 Professional 版本将能够使用 custom 进行扩展IExporter,而非 Professional 版本,即使所有“Professional”程序集都到位,也无法使用此功能。

于 2010-02-10T07:23:40.260 回答
2

您可以使用条件编译或 ConditionalAttribute。这是一篇解释这些主题的文章:使用条件编译构建和维护多个应用程序版本

于 2010-02-10T07:31:27.713 回答
0

标志是一种选择,但我想那将是“条件编译”。安装类型会设置一个标志,基于这些标志,一些代码会被执行,否则它会被忽略。

你可以有不同的代码分支吗?这样每个版本将只有该安装类型的相关代码。无需携带永远不会使用的代码。

于 2010-02-10T07:24:25.797 回答