2013-01-22 20 views
6

Feature flags to coś, czego często używam, ale nigdy nie zastanawiałem się nad tym, dopóki ten nowy projekt, nad którym pracuję, nie zaczął się.Implementacja flag funkcji w C#

zazwyczaj wdrożyć go z dużą ilością klawiszy w moim pliku web.config, ale takie podejście ma dwie główne wady:

  1. Przy zmianie wartości wewnątrz pliku web.config pula aplikacji zostaje wznowiona - To może być problem w ciężkich warunkach dostępu
  2. zbyt wielu przycisków w pliku web.config jest mylące i może dostać dość niechlujny

Jaki jest najlepszy sposób, aby rozwiązać te problemy?

+1

Ile flag prawdopodobnie masz? –

+0

Zwykle mam tylko kilka. Mniej niż 10. Ale przy dobrej implementacji widzę, że rośnie, aby pomóc w administrowaniu aplikacjami. – tucaz

Odpowiedz

4

Nie musisz przechowywać flag funkcji w web.config.

Opcją jest przechowywanie ich w bazie danych - ma to tę dodatkową zaletę, że działa dobrze w farmie internetowej.

Należy pamiętać, że z funkcji flagami, gdy jesteś w pozycji, która funkcja będzie albo na stałe lub wyłączyć (słownie podczas przechodzenia z widgetA do widgetB, i nie trzeba już żadnego kodu widgetA), powinno być usunięcie funkcja i powiązana flaga. Pomoże to w zarządzaniu zestawem funkcji.

+3

@Dvvovator - prosimy o komentarz? – Oded

+0

masz rację, jest pytanie, jak to pokonać, a nie to, co mam, więc go usunąć. (I po prostu powiedzieć, że nadal korzystać web.config jest coś innego) – Aristos

7

Sugerowałbym użycie IoC do odfiltrowania implementacji flag funkcji - wszystko, czego potrzebuje twój kod, to coś podobnego do linii IFeatures.IsEnabled("FeatureA"). Gdy już to zrobisz, możesz wybrać najbardziej sensowną realizację - kilka propozycji poniżej:

  • realizacji web.config (zgodny z tym, co masz teraz)
  • implementacji bazy danych (z pamięci podręcznej wartości, ewentualnie stosując SqlDependency jeśli chcesz pracować na farmie internetowej)
  • Oddzielna implementacja pliku konfiguracyjnego (buforowana, ale za pomocą FileSystemWatcher w celu sprawdzenia zmian w pliku konfiguracyjnym i załadowania ich bez konieczności restartowania puli aplikacji). Pozwala to na przypadek, gdy potrzebujesz funkcji zdefiniowanych zanim będziesz potrzebował swojego DB.
+3

W dalszej końcówki, spróbuj użyć stałe teksty zamiast magicznych ciągów na flagi. Łatwiej jest znaleźć gdzie są one wykorzystywane, gdy chcesz, aby oczyścić je lub zmienić ich nazwy, a Intellisense przypomina ludziom, co flagi zostały zdefiniowane, co zmniejsza szanse osób tworzenie duplikatów. –