Özellik Bayrağı Kullanımı ile Özellik Yönetimi
Kod değişikliği yapmadan uygulama özelliklerini yönetin
You can access the English version via this link.
Özellik bayrağı, kod üzerinde herhangi bir değişiklik yapılmadan iş akışının değişmesini sağlayan tekniğe verilen isimdir. Tanımında yer alan ‘teknik’ gözünüzü korkutmasın. İşin temeli tüm yazılımcıların bildiği if-else koşuluna dayanmaktadır.
Birkaç kullanım senaryosundan bahsedelim. Bu şekilde tekniğin hangi durumlarda kullanılabileceğini ve bize ne gibi faydalar sağladığını daha rahat kavrayabiliriz.
Yeni bir özellik geliştirdiğinizi düşünün. Bu özelliği son kullanıcıya ne zaman sunacağınıza pazarlama ekibi karar verecektir. Bu durumda kodunuzu canlı ortama (production environment) özellik bayrağı ile gönderebilirsiniz. Bu bayrağı etkin hale getirme kararı artık pazarlama ekibine kalmıştır. Siz de bir sonraki görevinize odaklanabilirsiniz. Kısacası ekipler arasındaki bağımlılığı azaltmak için bu teknikten faydalanabilirsiniz.
Kullanıcı adı veya IP gibi bilgilere göre bazı özelliklerin aktif olup olmayacağına karar verebilirsiniz. Bu şekilde canlı ortamda bazı özelliklere belirli bir kullanıcı grubunun erişmesini sağlayabilirsiniz. Bu yöntem ile özellik bayrağındaki kriterleri kendi kullanıcı bilgilerinize göre ayarlayıp canlı ortamda test yapabilme gücüne kavuşabilirsiniz. Bir diğer kullanım şekliyse bayraklar aracılığıyla iki farklı senaryoyu kullanıcılara sunmak ve böylece A/B testi yapmak olabilir.
Not: Bu konu hakkında daha fazla bilgi edinmek için yabancı dildeki kaynaklara başvurmak isterseniz şu anahtar kelimeler yardımcı olabilir: Feature Flag, Feature Toggle, Feature Switch, Feature Flipping
Özellik Bayrağının .Net Projelerinde Kullanımı
GitHub üzerinden hazırladığım örnek projeye ulaşabilirsiniz.
Bu özelliği kolaylıkla .Net projeleri içerisinde uygulayabiliriz. Bunun için Microsoft tarafından geliştirilmiş FeatureManagement kütüphanesinden faydalanabiliriz. Bu kütüphane ayarlar kısmında yer alan anahtar kelimeler üzerinden özelliklerin açık veya kapalı olduğuna dair bilgileri dönmektedir. Kütüphanenin kullanımı oldukça basittir.
1. Aşağıdaki kod satırı sayesinde bağımlılıkları sistemimize tanıtarak işe başlıyoruz.
services.AddFeatureManagement();
2. appsettings.json
içerisine özelliklerimizin isimlerini yazıyoruz. Artık özelliklerimizi açıp kapamak için bu dosyayı kullanabiliriz.
"FeatureManagement": {
"ExternalSystemIntegration": true,
"UseUtc": false,
"PreviewActive": true
}
3. IFeatureManager
arayüzü üzerinde tanımlı olan IsEnabledAsync
metodu aracılığı ile özelliklerin açık mı kapalı mı olduğunu öğrenerek kod akışımıza karar veriyoruz.
Aşağıdaki örnek kod parçasına göz atalım. Ayar dosyamızda UseUtc
bayrağımızın false
olduğunu düşünelim. Bu durumda aşağıdaki kod bloğu çalıştığı zaman Now
alanına yerel saat bilgisini yerleştirmiş oluyoruz.
Özellik bayrağı sayesinde kodumuz üzerinde bir değişiklik yapmadan, yeni bir versiyon yayınlamadan veya uygulamamızı kapatıp açmadan kodumuzun akışını değiştirebiliyoruz.appsettings.json
dosyası üzerinde yer alan UseUtc
alanının karşılığını true
olarak değiştirdiğimiz durumda, Now
alanında şimdiki zamanın Utc değerini görebilmekteyiz.
Özellik bayrağı yönetimi için kütüphanenin sunduğu diğer hizmetlere bu link aracılığı ile ulaşabilirsiniz.
Umarım yararlı bir yazı olmuştur. Diğer yazılarıma göz atmak için bu linke tıklayabilirsiniz.