Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠΈΡΠ°-ΡΠ»Π°Π³ΠΈ, ΠΈ ΡΠ°Π·Π±Π΅ΡΡΠΌ ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΈΠΌΠΈ.
ΠΠ°Π½Π½Π°Ρ ΡΡΠ°ΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠΌ. Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π».
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠΈΡΠ°-ΡΠ»Π°Π³?
Π€ΠΈΡΠ°-ΡΠ»Π°Π³ β ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ± Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΈΠ»ΠΈ Π²ΡΠΊΠ»ΡΡΠΈΡΡ ΡΠΈΡΡ ΠΈΠ»ΠΈ Π²Π΅ΡΠ²Ρ ΠΊΠΎΠ΄Π° Π²Π½ΡΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π ΠΈΠ΄Π΅Π°Π»Π΅, Β«ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»ΡΒ» Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π»ΠΈΡΡΡ Π½Π° ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠ΅Π»ΠΈΠ·. ΠΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΡΠΌΠ±Π»Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Π²ΠΊΠ»ΡΡΠ°Π΅ΡΠ΅ ΠΈΠ»ΠΈ Π²ΡΠΊΠ»ΡΡΠ°Π΅ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
Π’Π°ΠΊΠΈΠ΅ ΡΠ»Π°Π³ΠΈ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠΈΠ°ΡΠΈΠΉ:
- Π£ΡΠ»ΠΎΠ²ΠΈΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠΈΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ QA ΠΈ Π²ΡΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ½Π΅, ΠΏΠΎΠΊΠ° ΡΠΈΡΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π³ΠΎΡΠΎΠ²Π°;
- Π€ΠΈΡΠ°, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈΠ»ΠΈ Π³ΡΡΠΏΠΏΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠ²;
- ΠΡΠ½ΠΎΠ²Π°Π½Π½Π°Ρ Π½Π° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠΈΡΠ°, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΈΠ»ΠΈ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π±Π°Π½Π½Π΅Ρ;
- ΠΠ»ΠΈΠ΅Π½Ρ ΡΠ°ΠΌ ΡΠ΅ΡΠ°Π΅Ρ, Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΡΠΈΡΠ° ΠΈΠ»ΠΈ Π½Π΅Ρ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
Π ΡΠΈΡΠ°-ΡΠ»Π°Π³Π°Ρ Π² ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ΅ .NET ΠΌΠ½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠ°ΡΡ Ρ ΡΠ΅Π³ΠΎ-ΡΠΎ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΈ ΡΡΠ»ΠΎΠΆΠ½ΡΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΠ°ΠΊ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π΄Π°Π»Π΅Π΅, ΡΠ°ΠΌΡΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅ ΡΠΈΡΠ°-ΡΠ»Π°Π³ΠΈ ΡΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ, ΠΈ ΠΈΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΈΡΠ°-ΡΠ»Π°Π³ Π² .NET ΠΈ ΡΠ°ΡΡΠΈΡΠΈΠΌ Π΅Π³ΠΎ Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ.
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ.
- Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΡΠ°-ΡΠ»Π°Π³Π°.
- ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΉ ΡΠΈΡΠ°-ΡΠ»Π°Π³.
- ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ° Feature Management.
- ΠΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΠΈΠ»ΡΡΡΡ.
- ΠΠ°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ°ΡΡΠΎΠΌΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΈΠ»ΡΡΡΠ°.
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Ρ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΌΠΈ ΡΠΈΠ»ΡΡΡΠ°ΠΌΠΈ.
- FeatureGate Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ² MVC.
- Azure Feature Management.
- ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ² Π²Ρ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ Π½Π° Π½Π°ΡΠ΅ΠΌ ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ°ΡΠΏΠΈΡΡΠ°Β»
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΠΊΠ°Π½Π°Π»Ρ
(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.
Π‘ΡΠ°ΡΡΡ ΠΏΠΎ ΡΠ΅ΠΌΠ΅
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ° 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. ΠΡΡ Π·Π΄Π΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΊ ΡΠΈΡΠ°-ΡΠ»Π°Π³Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΡΡΠ»ΡΠΊ, ΡΡΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π³ΡΡΠΏΠΏ ΡΠΈΡ.
ΠΠΈΠ΄ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠΈΡΠ°-ΡΠ»Π°Π³Π° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ 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. Π’Π΅ΠΏΠ΅ΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π²Π½ΠΎΡΠΈΠΌ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ. ΠΠΎΡΠ»Π΅ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ ΡΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ.