在C#中实现功能标志

时间:2013-01-22 12:26:43

标签: c# asp.net architecture

Feature flags是我经常使用的东西,但在我正在开展的这个新项目开始之前,我从未真正考虑过它。

我通常在web.config文件中使用大量键来实现它,但这种方法有两个主要缺点:

  1. 更改web.config中的值时,应用程序池将重新启动 - 这在重度访问环境中可能会出现问题
  2. web.config文件中的键太多会让人感到困惑,而且可能会非常混乱
  3. 克服这些问题的最佳方法是什么?

3 个答案:

答案 0 :(得分:8)

我建议使用IoC来抽象出功能标志的实现 - 所有代码需要访问的内容都是IFeatures.IsEnabled("FeatureA")。完成此操作后,您可以选择最明智的实施方案 - 以下一些建议:

  • web.config实现(与您现有的兼容)
  • 数据库实现(使用缓存值,如果要在Web场上工作,可能使用SqlDependency)
  • 单独的配置文件实现(缓存,但使用FileSystemWatcher检查配置文件的更改并加载它们而无需重新启动应用程序池)。这允许您需要在需要数据库之前定义的功能。

答案 1 :(得分:4)

您不必在web.config中存储功能标记。

一个选项是将它们存储在数据库中 - 这样可以在Web场中很好地工作。

请注意,使用功能标记,一旦您处于功能永久打开或关闭的位置(例如从widgetA转换到widgetB,并且您将不再需要任何widgetA代码),您应该删除功能和相关标志。这将有助于管理功能集。

答案 2 :(得分:0)

如果要向C#应用程序添加功能标志,我不建议创建自己的功能标志解决方案,而是使用可以直接与之集成的几种功能标志即服务提供程序之一C#开箱即用。

一种这样的解决方案是Floodgate,它具有适用于.Net的SDK,您可以立即使用应用程序中的功能标志来安装,启动和运行该软件。

免责声明,我叫Eugene,我是Floodgate的创始人。话虽如此,无论您决定使用哪种功能标记提供程序,我的建议都是相同的。