10

功能标志是我经常使用的东西,但在我正在从事的这个新项目开始之前,我从未真正考虑过它。

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

  1. 当更改 web.config 中的值时,应用程序池会重新启动 - 这在访问量很大的环境中可能是一个问题
  2. web.config 文件中的键过多会让人感到困惑,而且会变得非常混乱

克服这些问题的最佳方法是什么?

4

3 回答 3

11

我建议使用 IoC 来抽象出你的特性标志的实现——你需要访问的所有代码都是类似IFeatures.IsEnabled("FeatureA"). 完成此操作后,您可以选择最明智的实施方式 - 一些建议如下:

  • web.config 实现(与您现在拥有的兼容)
  • 数据库实现(使用缓存值,如果您想在网络场上工作,可能使用 SqlDependency)
  • 单独的配置文件实现(缓存,但使用 FileSystemWatcher 来检查配置文件的更改并加载它们而无需重新启动应用程序池)。这允许您需要在需要数据库之前定义功能的情况。
于 2013-01-22T12:59:46.267 回答
5

您不必将功能标志存储在web.config.

一种选择是将它们存储在数据库中 - 这具有在网络场中运行良好的额外好处。

请注意,使用功能标志,一旦您处于某个功能将永久打开或关闭的位置(例如,从小部件 A 转换到小部件 B 时,您将不再需要任何小部件 A 代码),您应该删除该功能并关联旗帜。这将有助于管理功能集。

于 2013-01-22T12:29:46.687 回答
0

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

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

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

于 2020-03-16T11:32:36.567 回答