2013-01-22 59 views
6

Feature flags是我經常使用的東西,但直到我正在開發的這個新項目開始之前,我從未真正考慮過它。C#中功能標誌的實現

我通常有很多在我的web.config文件密鑰的實現,但這種方法有兩個主要缺點:

  1. 當改變內部的web.config值的應用程序池重新啓動 - 這可能是一個在沉重的接入環境
  2. 有太多的按鍵在web.config文件的問題是混亂的,並能得到相當混亂

什麼是克服這些問題的最佳途徑?

+1

你可能有多少個標記? –

+0

我通常只有幾個。少於10個。但通過良好的實施,我可以看到它越來越多地幫助應用程序管理。 – tucaz

回答

4

您不必在web.config中存儲功能標誌。

一個選項是將它們存儲在數據庫中 - 這具有在Web場中良好運行的額外好處。

請注意,使用功能標誌時,一旦您的功能處於永久開啓或關閉狀態(例如,從widgetA過渡到widgetB,並且不再需要任何widgetA代碼時),您應該將其移除該功能和相關的標誌。這將有助於管理功能集。

+3

@Downvoter - 照顧評論? – Oded

+0

你有權利,是問如何克服,而不是我有類型,所以我刪除它。 (我只是說,仍然使用web.config,這是不同的) – Aristos

7

我會建議使用IoC來抽象出您的功能標誌的實現 - 您需要訪問的所有代碼都是沿着IFeatures.IsEnabled("FeatureA")的行。一旦你做到了這一點,你可以選擇最明智的執行 - 下面的一些建議:

  • web.config中實現(與你現在有什麼兼容)
  • 數據庫實現(與緩存值,可能使用的SqlDependency如果你想在Web場上工作)
  • 單獨的配置文件實現(緩存,但使用FileSystemWatcher檢查配置文件的更改並加載它們而無需重新啓動應用程序池)。這允許您在需要數據庫之前需要定義的功能的情況。
+3

作爲進一步的提示,嘗試使用枚舉而不是魔術字符串作爲標誌。當您想要清理它們或更改名稱時,更容易找到它們的使用位置,並且Intellisense會提醒用戶已定義了哪些標誌,從而減少創建重複項的機會。 –