Найти Ρ‚Π΅ΠΌΡƒ
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста

🏴 Π€ΠΈΡ‡Π°-Ρ„Π»Π°Π³ΠΈ Π² .NET: ΠΎΡ‚ простого ΠΊ слоТному

ОглавлСниС

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ обсудим, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ΠΈ, ΠΈ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π½ΠΈΠΌΠΈ.

Данная ΡΡ‚Π°Ρ‚ΡŒΡ являСтся ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠΌ. Бсылка Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π».

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³?

Π€ΠΈΡ‡Π°-Ρ„Π»Π°Π³ β€” это способ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„ΠΈΡ‡Ρƒ ΠΈΠ»ΠΈ Π²Π΅Ρ‚Π²ΡŒ ΠΊΠΎΠ΄Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ прилоТСния.

Π’ ΠΈΠ΄Π΅Π°Π»Π΅, Β«ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒΒ» Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ·. Π­Ρ‚ΠΎ просто Ρ‚ΡƒΠΌΠ±Π»Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚Π΅ ΠΈΠ»ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

Π’Π°ΠΊΠΈΠ΅ Ρ„Π»Π°Π³ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ нСсколько Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΉ:

  • УсловиС Π½Π° основС окруТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ„ΠΈΡ‡Ρƒ Π²ΠΎ врСмя QA ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½Π΅, ΠΏΠΎΠΊΠ° Ρ„ΠΈΡ‡Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ²Π°;
  • Π€ΠΈΡ‡Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ тСстировщиков;
  • Основанная Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ„ΠΈΡ‡Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΈΠ»ΠΈ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ врСмя, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π±Π°Π½Π½Π΅Ρ€;
  • ΠšΠ»ΠΈΠ΅Π½Ρ‚ сам Ρ€Π΅ΡˆΠ°Π΅Ρ‚, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Ρ„ΠΈΡ‡Π° ΠΈΠ»ΠΈ Π½Π΅Ρ‚, Π² зависимости ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Π’ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³Π°Ρ… Π² экосистСмС .NET ΠΌΠ½Π΅ нравится Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ с Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ простого ΠΈ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости. Как Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π΄Π°Π»Π΅Π΅, самыС ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ΠΈ ΡƒΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹, ΠΈ ΠΈΡ… достаточно просто ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ простой Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ Π² .NET ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΠΌ Π΅Π³ΠΎ Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

  1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… условий.
  2. РСализация Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³Π°.
  3. НастраиваСмый Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³.
  4. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ стандартов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Feature Management.
  5. ВстроСнныС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹.
  6. НаписаниС кастомной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°.
  7. ИспользованиС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² с кастомными Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌΠΈ.
  8. FeatureGate для ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² MVC.
  9. Azure Feature Management.
  10. Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡˆΠ°Ρ€ΠΏΠΈΡΡ‚Π°Β»

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ, ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΠΊΠ°Π½Π°Π»Ρƒ

(function () { let link = document .getElementById ("8ea42648-3ef7-4e6b-b278-87c980e2e5b5-https://proglib.io/w/1aa48916-12"); if (! link) return; let href = link .getAttribute ("href"); if (! href) return; let prefix = link .dataset .prefix; let action = link .dataset .action; link .addEventListener ("click", function (e) { let data = new FormData (); data .append ("url", href); apiFetch (action, { method: "POST", body: data }) .then (function (res) {}) .catch (function (err) { console .error (err); }); }) })();

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… условий

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΎΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² IDE ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ Ρ„Π°ΠΉΠ» Program.cs. Π—Π΄Π΅ΡΡŒ Π²Ρ‹ Π½Π°ΠΉΠ΄Ρ‘Ρ‚Π΅ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ эндпоинт GET для получСния Π½Π°Π±ΠΎΡ€Π° ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΎΠ² ΠΏΠΎΠ³ΠΎΠ΄Ρ‹.

БокращСнная вСрсия ΠΊΠΎΠ΄Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с самым Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ (ΡƒΠ±Ρ€Π°Π½Π° рСализация swagger) выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, запустим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΉΠ΄Ρ‘ΠΌ Π½Π° https://localhost:{portnumber}/weatherforecast (Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°).

Если всё Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΎΠ². Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ показываСтся для мСня.

РСализация Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³Π°

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ Π² эндпоинтС ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΎΠ² ΠΏΠΎΠ³ΠΎΠ΄Ρ‹.

Для простоты скаТСм, Ρ‡Ρ‚ΠΎ эндпоинт Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΈΠ»ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² зависимости ΠΎΡ‚ Ρ„Π»Π°Π³Π°.

Π‘Π°ΠΌΡ‹ΠΉ простой Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ β€” это ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ if, зависящий ΠΎΡ‚ Π±ΡƒΠ»Π΅Π²Π° выраТСния. Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ forecastEnabled. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ опрСдСляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ эндпоинтом:

  • true (Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½), эндпоинт Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΎΠ²;
  • false (Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½), эндпоинт Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄ состояния 404.

НастраиваСмый Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³

Пока Π² этом Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ смысла. Π€ΠΈΡ‡Π°-Ρ„Π»Π°Π³ Π»ΠΈΠ±ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, Π»ΠΈΠ±ΠΎ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ для всСх ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². Для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ эндпоинта ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΎΠ² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ forecastEnabled ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π·Π°Ρ€Π΅Π»ΠΈΠ·ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΈ этом тСряСтся смысл Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ΠΎΠ². Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ наш Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ ΠΏΠΎΠ»Π΅Π·Π΅Π½, спСрва Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΉΡ‚ΠΈ способ динамичСски ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Для этого состояниС Ρ„ΠΈΡ‡ΠΈ Π½Π°Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π²Π½Π΅ ΠΊΠΎΠ΄Π° прилоТСния. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΡ‹ смоТСм ΠΌΠ΅Π½ΡΡ‚ΡŒ настройку Π²ΠΎ врСмя Ρ€Π΅Π»ΠΈΠ·Π°, Π° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ сборки ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… стадиях CI/CD-ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² стСйдТингС ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅.

Для настройки состояний Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ appsettings. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠ΅ΠΊΡ†ΠΈΡŽ FeatureFlags, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ создадим свойство WeatherForecast.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ, Π·Π°ΠΌΠ΅Π½ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ forecastEnabled Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ· appsetings.

Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

πŸ“– ВОП-10 ΠΊΠ½ΠΈΠ³ ΠΏΠΎ C# Π² 2023 Π³ΠΎΠ΄Ρƒ: ΠΎΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° Π΄ΠΎ профСссионала

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ стандартов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Feature Management

ВмСсто опрСдСлСния своих стандартов ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠœΠ°ΠΉΠΊΡ€ΠΎΡΠΎΡ„Ρ‚Π° ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° NuGet Microsoft.FeatureManagement.AspNetCore.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для установки ΠΏΠ°ΠΊΠ΅Ρ‚Π°.

ПослС установки ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ провСсти Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ нашСй собствСнной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Π°Π·ΠΎΠ²ΠΎΠΉ. Для этого:

  • Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ пространство ΠΈΠΌΡ‘Π½ Microsoft.FeatureManagement;
  • ЗарСгистрируСм слуТбу AddFeatureManagement;
  • Π’Π½Π΅Π΄Ρ€ΠΈΠΌ IFeatureManager Π² эндпоинт;
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ IFeatureManager.IsEnabledAsync, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π»ΠΈ Ρ„ΠΈΡ‡Π°.

ASP.NET v7 прСдставил EndpointFilter, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ API. Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ с Π»Ρ‘Π³ΠΊΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π½Π΅ Π·Π°Ρ…Π»Π°ΠΌΠ»ΡΡ‚ΡŒ Сю ваш эндпоинт (Π² этом случаС β€” провСряя, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π»ΠΈ Ρ„ΠΈΡ‡Π°). Для создания ΠΌΠ½ΠΎΠ³ΠΎΡ€Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° эндпоинта для Π²Π°ΡˆΠΈΡ… Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ мою ΡΡ‚Π°Ρ‚ΡŒΡŽ Implementing a Feature Flag based Endpoint Filter

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Π² Ρ„Π°ΠΉΠ»Π΅ appsettings.json Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ. Π­Ρ‚ΠΎΡ‚ шаг Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ сам ΠΏΠΎ сСбС, Π½ΠΎ Π΄Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠ΅Π΅β€¦

ВстроСнныС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹

Помимо ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ способа настройки Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ΠΎΠ², ΠΏΠ°ΠΊΠ΅Ρ‚ прСдоставляСт нСсколько Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ΠΎΠ² (Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²) для Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённых ситуаций.

Π‘ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ Feature Management ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ (true ΠΈΠ»ΠΈ false), ΠΊΠ°ΠΊ Π΄Π΅Π»Π°Π»ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅. Но Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ понятиС Β«Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Β». Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° Π΅ΡΡ‚ΡŒ своя схСма ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ (Π² JSON), Π½ΠΎ способ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π»ΠΈ Ρ„ΠΈΡ‡Π°, остаётся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ для всСх Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ².

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ встроСнным Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ собствСнныС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Доступны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹:

  • PercentageFilter для случайного Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ/Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ„ΠΈΡ‡ΠΈ Π² зависимости ΠΎΡ‚ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°;
  • TimeWindowFilter для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ„ΠΈΡ‡ΠΈ Π²ΠΎ врСмя Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° с Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ;
  • TargetingFilter, для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ„ΠΈΡ‡ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ (для этого Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚).

Для большСй ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ.

Насколько я знаю, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ TargetingFilter нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ структура минимального API. ΠŸΡ€ΠΈ рСгистрации Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

Π­Ρ‚ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ доступны Π² пространствС ΠΈΠΌΡ‘Π½ Microsoft.FeatureManagement.FeatureFilters ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ зарСгистрированы ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠžΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° остаётся ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΉ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, это Π½Π΅ мСняСт Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ провСряСм, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π»ΠΈ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³.

Как Π±Ρ‹Π»ΠΎ сказано Ρ€Π°Π½Π΅Π΅, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π½ΡŒΡˆΠ΅, Π½ΠΎ настраиваСм ΠΈΡ… ΠΈΠ½Π°Ρ‡Π΅.

НиТС ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° опрСдСляСтся со свойством Name. Π‘ΠΎ свойством Parameters конфигурация Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° установлСна Π½Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π° ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.

НиТС ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π°ΡƒΠ΄ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. ВмСсто свойства Parameters, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ настроСн со свойством Audience.

НаписаниС кастомной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ собствСнной Π»ΠΎΠ³ΠΈΠΊΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° создадим класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс IFeatureFilter, ΠΈ зарСгистрируСм слуТбу.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ IFeatureFilter позволяСт Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ EvaluateAsync. Π—Π΄Π΅ΡΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Ρ„ΠΈΡ‡Π° ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ FeatureFilterEvaluationContext, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Для получСния доступа ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ FeatureFilterEvaluationContext.Parameters.Get () .

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° FilterAlias устанавливаСтся имя Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°. Π­Ρ‚ΠΎ Ρ‚ΠΎ ΠΆΠ΅ имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΅Ρ‘ с Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠΌ.

ИспользованиС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² с кастомными Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌΠΈ

Π€ΠΈΠ»ΡŒΡ‚Ρ€ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, извСстныС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя выполнСния. НапримСр, это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρƒ TargetingFilter для ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… API, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ способСн ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ контСкст HTTP ΠΈΠ»ΠΈ сабсСт ΠΈΠ· Π½Π΅Π³ΠΎ.

Для создания Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ IFeatureFilter интСрфСйсом IContextualFeatureFilter. ПослС Ρ‚Π°ΠΊΠΎΠ³ΠΎ измСнСния ΠΌΠ΅Ρ‚ΠΎΠ΄ EvaluateAsync Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ считываСтся ΠΈ посылаСтся Π² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, Π½ΠΎ вмСсто Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΌΠΎΠ³ Π±Ρ‹Ρ‚ΡŒ HttpContext, ClaimsPrinciple ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Ρ‘.

FeatureGate для ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² MVC

Π­Ρ‚Π° Ρ‡Π°ΡΡ‚ΡŒ доступна, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ построСно Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Ρ… ΠΈ Π±Π΅Π· структуры минимального API.

ВмСсто ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π»ΠΈ Ρ„ΠΈΡ‡Π° Π² ΠΊΠΎΠ΄Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ FeatureGate, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ вСсь ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΈΠ»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ эндпоинт. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‰ΠΈΠΉΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ, β€” это имя Ρ„ΠΈΡ‡ΠΈ, установлСнноС Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

Azure Feature Management

Пока всё ΠΈΠ΄Ρ‘Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ Π»ΡƒΡ‡ΡˆΠ΅.

Π£ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ нСдостаток. ΠŸΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ измСнСния вступили Π² силу. Π­Ρ‚ΠΎ влияСт Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ Π±Π΅Π· пСрСзапуска прилоТСния, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Feature Management ΠΎΡ‚ Azure. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ динамичСски ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ΠΎΠ².

ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ΠΈ Π² Azure (Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ†Π΅Π½).

Π’ ΠΏΠΎΡ€Ρ‚Π°Π»Π΅ Azure ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ±ΠΈΡ€Π°Ρ‚ΡŒ опрСдСлСния Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹. Π­Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π±Ρ‹Π»ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ appsettings.json, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ интСрфСйсом.

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, посмотритС Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ WeatherForecast Π² ΠΏΠΎΡ€Ρ‚Π°Π»Π΅ Azure. Π•Ρ‰Ρ‘ здСсь ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³Ρƒ добавляСтся ярлык, Ρ‡Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΈ создании Π³Ρ€ΡƒΠΏΠΏ Ρ„ΠΈΡ‡.

   ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Feature Management Π² ΠΏΠΎΡ€Ρ‚Π°Π»Π΅ Azure
ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Feature Management Π² ΠΏΠΎΡ€Ρ‚Π°Π»Π΅ Azure

Π’ΠΈΠ΄ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³Π° выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

   ИзмСнСниС Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³Π° WeatherForecast
ИзмСнСниС Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³Π° WeatherForecast

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Azure Feature Management Π² ΠΊΠΎΠ΄Π΅, для Π½Π°Ρ‡Π°Π»Π° установим Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ NuGet.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ смоТСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Azure Feature Management, понадобится Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Azure App Configuration. Π’ΠΎ врСмя настройки ΠΌΡ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ ΠΊ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ рСсурсу Azure ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ΠΈ. Помимо этого, Π΅ΡΡ‚ΡŒ опция опрСдСлСния, ΠΊΠ°ΠΊΠΈΠ΅ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ΠΈ Π½Π°Π΄ΠΎ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² зависимости ΠΎΡ‚ ΠΈΡ… ярлыка.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Azure ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ ваши Π½ΡƒΠΆΠ΄Ρ‹ ΠΈ дальшС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ кэша. Для Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ всСх Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… посмотритС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ ΠΌΡ‹ считываСм всС Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ΠΈ Π±Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ ярлыка ΠΈ всС Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ΠΈ для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ окруТСния. Π—Π΄Π΅ΡΡŒ Π²Π°ΠΆΠ΅Π½ порядок, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ послСднСС ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ΅. ИспользованиС Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ„ΠΈΡ‡ для всСх ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ (Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ΠΈ Π±Π΅Π· ярлыка), ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½ (Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ΠΈ с ярлыком Production).

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Azure Feature Management, Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ управлСния Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³Π°ΠΌΠΈ ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹, Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π±Π΅Π· Azure.

Π’ качСствС послСднСго шага ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ настройки Ρ„ΠΈΡ‡ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° appsettings.json, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠΌ Π²Π»Π°Π΄Π΅Π΅Ρ‚ Azure.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ с простого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³Π°. Для этого Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π·Π°Π½ΠΎΠ²ΠΎ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ шагом ΠΊ Π»ΡƒΡ‡ΡˆΠ΅ΠΌΡƒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ Π±Ρ‹Π» Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ посрСдством пСрСмСщСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³Π° ΠΈΠ· ΠΊΠΎΠ΄Π° Π² Ρ„Π°ΠΉΠ» appsettings.json. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ стал Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ, Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ стало Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ (с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ) Π±Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ компиляции, облСгчая процСсс Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ„ΠΈΡ‡ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ срСдС. Π’ качСствС ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ эффСкта ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ стало ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ критСриям twelve-factor app.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом для Π²Π²ΠΎΠ΄Π° стандарта Π±Ρ‹Π»ΠΎ использованиС .NET Feature Management API. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ прСимущСством использования этого ΠΏΠ°ΠΊΠ΅Ρ‚Π° являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Помимо Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ΠΎΠ² для всСго прилоТСния, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Π² зависимости ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… условий. Π­Ρ‚Π° функция называСтся Β«Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠΌΒ», ΠΈ Ρƒ Feature Management API Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ встроСнных Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°: PercentageFilter, TimeWindowFilter, ΠΈ TargetingFilter.

Π’ Feature Management API ΠΌΠ½Π΅ большС всСго нравится Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ потрСбности Π² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ способа ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π»ΠΈ Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ всё Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

НаконСц, для максимальной гибкости Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Azure Feature Management. ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π² Ρ„Π°ΠΉΠ»Π΅ appsettings.json, Ρ„ΠΈΡ‡Π°-Ρ„Π»Π°Π³ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΡ€Ρ‚Π°Π» Azure. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ вносим Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ. ПослС внСсСния этих ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ автоматичСски обновится Π²ΠΎ врСмя выполнСния Ρ‡Π΅Ρ€Π΅Π· Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ.