作为供应商,我们需要向许多客户交付应用程序,有时我们需要为特定客户定制应用程序,例如启用或禁用某些功能,或为该客户设置适当的默认值。
我看到在一些开源项目中,这是用这种模式完成的:
#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();
}
}
他们的理由是这样可以更轻松地维护和测试软件,因为您不需要重新编译来启用或禁用某个功能,您不需要保留库或可执行文件的多个版本,而且您可以只向测试人员发送一个版本,然后测试人员可以在运行时启用或禁用功能。
是否有指南或方法来决定哪种方法更适合特定情况?或者我们应该只是通过掷硬币在它们之间做出选择,还是出于个人喜好?
最佳答案
我认为这取决于“有时”有多少。 如果您通过为每个客户构建单独的版本来启用/禁用功能,那么您需要仔细跟踪您已交付给哪个客户的内容,因为您需要支持应用程序的特殊版本。 当使用配置文件时,聪明的客户可能有机会启用他没有付费的功能,但维护对您来说要容易得多。 我会尽可能长时间地使用配置文件,因为它们更易于维护。
关于c++ - 针对特定于客户的定制的条件编译与运行时检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18975441/