0

作为供应商,我们需要向许多客户端发送应用程序,有时我们需要为特定客户端定制应用程序,例如通过启用或禁用某些功能,或为该客户端设置适当的默认值。

我已经看到在一些开源项目中,这是通过这种模式完成的:

#define ENABLE_FEATURE_XYZ 0

#if ENABLE_FEATURE_XYZ
void featureXyzImpl()
{
    ...
}
#endif

void main()
{
#if ENABLE_FEATURE_XYZ
    featureXyzImpl();
#endif
}

在这里,您通过将 ENABLE_FEATURE_XYZ 定义为 0 或 1 来打开或关闭该功能。好处是不需要的代码不存在。

但是一些同事认为,在现实世界中,您需要在运行时通过查看配置文件或注册表设置来执行自定义,而使用以下模式:

void featureXyzImpl()
{
    ...
}

void main()
{
    if (configFileValue("Enable Feature XYZ") == true) {
        featureXyzImpl();
    }
}

他们的理由是,它使维护和测试软件变得更容易,因为您不需要重新编译来启用或禁用一个功能,您不需要保留多个版本的库或可执行文件,并且您可以只发送给测试人员一个版本,然后他们可以在运行时启用或禁用功能。

是否有指南或方法论来决定哪种方法更适合特定情况?还是我们应该通过抛硬币或出于个人喜好在它们之间进行选择?

4

2 回答 2

1

如果您为每个客户系统单独编译您的应用程序,我会说您可以将其作为“条件编译”进行。如果你有一些客户群,你也应该这样做,并且你不希望任何人可以“破解”你的程序来滥用他没有付费的功能。但在任何其他情况下,我可以想象在运行时禁用它也会是更好的解决方案。

编辑:

根据您的运行时示例:如果您是第三方提供商,这是您唯一的选择,客户必须自己打开功能,您只需考虑他的客户使用了什么。

于 2013-09-24T07:39:09.183 回答
1

我认为这取决于“有时”有多少。如果您通过为每个客户构建单独的版本来启用/禁用功能,那么您需要仔细跟踪您交付给客户的内容,因为您需要支持该应用程序的特殊版本。使用配置文件时,聪明的客户可能有机会启用他没有付费的功能,但维护对您来说更容易。我会尽可能长时间地使用配置文件,因为它们更容易维护。

于 2013-09-24T07:59:03.623 回答