2013-01-22 29 views
6

Feature flags là thứ tôi thường sử dụng nhưng không bao giờ thực sự nghĩ nhiều về nó cho đến khi dự án mới này tôi bắt đầu.Việc triển khai cờ tính năng trong C#

tôi thường thực hiện nó với rất nhiều phím trong file web.config của tôi, nhưng phương pháp này có hai nhược điểm chính:

  1. Khi thay đổi một giá trị bên trong web.config hồ bơi ứng dụng được khởi động lại - Đây có thể là một vấn đề trong một môi trường truy cập nặng
  2. có quá nhiều phím trong file web.config là khó hiểu và có thể nhận được khá lộn xộn

cách tốt nhất để khắc phục những vấn đề này là gì?

+1

Bạn có khả năng có bao nhiêu cờ? –

+0

Tôi thường chỉ có một vài. Ít hơn 10. Nhưng với một triển khai tốt, tôi có thể thấy nó đang phát triển để trợ giúp với các ứng dụng quản trị viên. – tucaz

Trả lời

4

Bạn không phải lưu trữ cờ tính năng trong web.config.

Một tùy chọn là lưu trữ chúng trong cơ sở dữ liệu - điều này có lợi ích bổ sung khi hoạt động tốt trong trang trại. Lưu ý rằng với các cờ tính năng, khi bạn ở vị trí, một tính năng sẽ được bật hoặc tắt vĩnh viễn (giả sử khi chuyển từ widgetA sang widgetB và bạn sẽ không còn cần bất kỳ mã widgetA) nào, bạn nên xóa đối tượng địa lý và cờ được liên kết. Điều này sẽ giúp quản lý tập hợp tính năng.

+3

@Downvoter - chăm sóc bình luận? – Oded

+0

bạn có quyền, hãy hỏi cách khắc phục điều đó, không phải những gì tôi có, vì vậy tôi xóa nó. (Tôi chỉ nói để vẫn sử dụng web.config đó là một cái gì đó khác nhau) – Aristos

7

Tôi khuyên bạn nên sử dụng IoC để trừu tượng hóa việc triển khai cờ tính năng của mình - tất cả mã bạn cần truy cập là một cái gì đó dọc theo các dòng IFeatures.IsEnabled("FeatureA"). Một khi bạn đã làm điều này, bạn có thể chọn thực hiện hợp lý nhất - một số gợi ý dưới đây:

  • thực hiện web.config (tương thích với những gì bạn có bây giờ)
  • Cơ sở dữ liệu thực hiện (với các giá trị được lưu trữ, có thể sử dụng SqlDependency nếu bạn muốn làm việc trên một trang trại)
  • Triển khai tệp cấu hình riêng biệt (được lưu trong bộ nhớ cache, nhưng sử dụng FileSystemWatcher để kiểm tra các thay đổi đối với tệp cấu hình và tải chúng mà không cần phải khởi động lại nhóm ứng dụng). Điều này cho phép các trường hợp khi bạn cần các tính năng được xác định trước khi bạn cần DB của bạn.
+3

Là một mẹo nữa, hãy thử sử dụng enums thay vì chuỗi ma thuật cho cờ. Nó dễ dàng hơn để xác định vị trí nơi chúng được sử dụng khi bạn muốn làm sạch chúng hoặc thay đổi tên của chúng, và Intellisense nhắc nhở mọi người cờ đã được xác định, làm giảm cơ hội của những người tạo bản sao. –

Các vấn đề liên quan