在 C# 中实现功能标志

Posted

技术标签:

【中文标题】在 C# 中实现功能标志【英文标题】:Implementation of feature flags in C# 【发布时间】:2013-01-05 16:22:47 【问题描述】:

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

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

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

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

【问题讨论】:

你可能有多少个标志? 我通常只有几个。不到 10 个。但是通过良好的实现,我可以看到它越来越有助于应用程序管理。 【参考方案1】:

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

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

【讨论】:

作为进一步的提示,尝试使用枚举而不是魔术字符串作为标志。当您想要清理它们或更改它们的名称时,更容易找到它们的使用位置,并且 Intellisense 会提醒人们已经定义了哪些标志,从而减少人们创建重复项的机会。【参考方案2】:

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

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

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

【讨论】:

你说得对,是问如何克服这个问题,而不是我输入的内容,所以我将其删除。 (我只是说仍然使用不同的 web.config)【参考方案3】:

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

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

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

【讨论】:

以上是关于在 C# 中实现功能标志的主要内容,如果未能解决你的问题,请参考以下文章

您将如何在 C# 中实现“特征”设计模式?

急!!C# WPF 中实现百度文库的功能,可以显示多种文件格式例如Word、Excel、Pdf,有没有大侠可以帮助一下

在网页中实现QQ在线客服功能的流程

unity中实现物体的拖拽到指定位置的功能

C#中回车出发事件(+收藏)

Java中实现String.padLeft和String.padRight