在C#中实现功能标志

tuc*_*caz 7 c# architecture asp.net

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

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

  1. 更改web.config中的值时,应用程序池将重新启动 - 这在繁重的访问环境中可能会出现问题
  2. 在web.config文件中有太多的键令人困惑,可能会变得非常混乱

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

Ric*_*ard 8

我建议使用IoC抽象出你的功能标志的实现 - 你需要访问的所有代码都是如此IFeatures.IsEnabled("FeatureA").完成此操作后,您可以选择最合理的实现 - 以下一些建议:

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

  • 作为进一步的提示,尝试使用枚举而不是标志的魔术字符串.当你想要清理它们或更改它们的名字时,更容易找到它们被使用的位置,而Intellisense会提醒人们定义了哪些标志,减少了人们创建重复项的机会. (4认同)

Ode*_*ded 5

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

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

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