Özellik Bayrağı Kullanımı ile Özellik Yönetimi

Kod değişikliği yapmadan uygulama özelliklerini yönetin

Adem Catamak
2 min readJul 4, 2021

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.

Photo by John Smit on Unsplash

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.jsondosyası ü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.

--

--