作为供应商,我们需要向许多客户端发送应用程序,有时我们需要为特定客户端定制应用程序,例如通过启用或禁用某些功能,或为该客户端设置适当的默认值。
我已经看到在一些开源项目中,这是通过这种模式完成的:
#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();
}
}
他们的理由是,它使维护和测试软件变得更容易,因为您不需要重新编译来启用或禁用一个功能,您不需要保留多个版本的库或可执行文件,并且您可以只发送给测试人员一个版本,然后他们可以在运行时启用或禁用功能。
是否有指南或方法论来决定哪种方法更适合特定情况?还是我们应该通过抛硬币或出于个人喜好在它们之间进行选择?