ΠΠ΅Π΄Π½Π°Π³Π° ΠΎΠ±ΡΡΠ½ΡΠ²Π°ΠΌ Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΡΠΎ Π½Π° ΡΡΠ°ΡΠΈΡΡΠ°. ΠΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΈΡΡ ΠΏΠ»Π°Π½ Π±Π΅ΡΠ΅ Π΄Π° ΡΠ΅ Π΄Π°Π΄Π΅ Π΄ΠΎΠ±ΡΡ, Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ ΡΡΠ²Π΅Ρ Π·Π° ΡΡΠΊΠΎΡΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡΠΎΡΡ, Π½ΠΎ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ, Π½ΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»Π½ΠΈΡ Π°Π½Π°Π»ΠΈΠ· ΡΠ΅ ΠΎΠΊΠ°Π·Π°, ΡΠ΅ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π±Π°Π²Π½ΠΎ, ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΡΠΈ ΠΌΠΈΡΠ»Π΅Ρ
, LINQ Π΅ ΠΏΠΎ-Π±Π°Π²Π΅Π½, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π² ΠΊΠΎΡΠΌΠ°ΡΠΈΡΠ΅ ΠΌΠΈ. ΠΠΎ Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΡΠ΅ ΠΎΠΊΠ°Π·Π°, ΡΠ΅ ΠΈ Π°Π· ΡΡΠΌ ΡΠ³ΡΠ΅ΡΠΈΠ» Π² ΠΌΠ΅ΡΠΊΠΈΡΠ΅... ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π·Π° ΡΠ°Π·ΠΈ ΠΆΠΈΡΠ΅ΠΉΡΠΊΠ° ΠΈΡΡΠΎΡΠΈΡ ΠΈΠΌΠ° ΠΏΠΎΠ΄ ΠΈΠ·ΡΠ΅Π·ΠΊΠ°ΡΠ° ΠΈ Π² ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΏΡΠΈΠΌΠ΅ΡΡΡ Π΅ Π΄ΠΎΡΡΠ° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ ΠΈ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° ΠΏΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ, ΠΊΠ°ΠΊΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ ΠΏΡΠ°Π²ΠΈ Π² Π΅Π΄Π½ΠΎ ΠΏΡΠ΅Π΄ΠΏΡΠΈΡΡΠΈΠ΅, ΡΠ΅ ΠΎΠΊΠ°Π·Π° Π΄ΠΎΡΡΠ° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°, ΠΊΠ°ΠΊΡΠΎ ΠΌΠΈ ΡΠ΅ ΡΡΡΡΠ²Π°, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ Π½Π° ΠΆΠΈΠ²ΠΎΡΠ°: Π²ΡΠ·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ Π²ΡΡΡ
Ρ ΡΠΊΠΎΡΠΎΡΡΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ Π½Π° ΡΡΠ°ΡΠΈΡΡΠ° Π±Π΅ΡΠ΅ Π½Π΅ ΡΠ΅ Π·Π°Π±Π΅Π»ΡΠ·Π²Π° ΠΏΠΎΡΠ°Π΄ΠΈ Π²ΡΠ½ΡΠ½Π° Π»ΠΎΠ³ΠΈΠΊΠ°: Moq, Autofac, EF Core ΠΈ Π΄ΡΡΠ³ΠΈ "ΡΠ΅ΠΌΡΡΠΈ".
ΠΠ°ΠΏΠΎΡΠ½Π°Ρ
Π΄Π° ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΠ΄ Π²ΠΏΠ΅ΡΠ°ΡΠ»Π΅Π½ΠΈΠ΅ΡΠΎ ΠΎΡ ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ:
ΠΠ°ΠΊΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, Π°Π²ΡΠΎΡΡΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈ Π΄Π΅Π»Π΅Π³Π°ΡΠΈ Π²ΠΌΠ΅ΡΡΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ΠΈ ΠΎΡ ΡΠΈΠΏ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΡΠΎ ΡΡΠ΄Π΅ΡΠ΅Π½ Π½Π°ΡΠΈΠ½ Π·Π° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΡΠΊΠΎΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΠΈΠΌΠ° IL Π΅ΠΌΠΈΡΠΈΡ, Π½ΠΎ Π±ΠΈΡ ΠΈΡΠΊΠ°Π» Π΄Π° Ρ ΠΈΠ·Π±Π΅Π³Π½Π°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΎΠ²Π° Π΅ Π½Π°ΠΉ-ΡΡΡΠ΄ΠΎΠ΅ΠΌΠΊΠΈΡΡ Π½Π°ΡΠΈΠ½ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ°, ΠΊΠΎΡΡΠΎ Π΅ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½Π° Ρ Π³ΡΠ΅ΡΠΊΠΈ.
ΠΠ°ΡΠΎ ΡΠ΅ ΠΈΠΌΠ° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ Π²ΠΈΠ½Π°Π³ΠΈ ΡΡΠΌ Π±ΠΈΠ» Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΌΠ½Π΅Π½ΠΈΠ΅ Π·Π° ΡΠΊΠΎΡΠΎΡΡΡΠ° Π½Π° ΡΠ°Π·ΠΌΠΈΡΡΠ», Π½ΡΠΌΠ°Ρ ΠΎΡΠΎΠ±Π΅Π½ΠΎ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π° ΠΏΠΎΡΡΠ°Π²ΡΠΌ ΠΏΠΎΠ΄ Π²ΡΠΏΡΠΎΡ ΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅ Π½Π° Π°Π²ΡΠΎΡΠ°.
Π§Π΅ΡΡΠΎ ΡΡΠ΅ΡΠ°ΠΌ Π½Π°ΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΡΠ΅Π΄ΠΏΡΠΈΡΡΠΈΠ΅ΡΠΎ. Π’ΠΈΠΏΡΡ Π΅ Π²Π·Π΅Ρ. ΠΠ·Π΅ΡΠ° Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΈΠΌΠΎΡΠ°. ΠΠ·Π²ΠΈΠΊΠ²Π° ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΡΡ SetValue ΠΈ Π²ΡΠΈΡΠΊΠΈ ΠΌΡ ΡΠ΅ ΡΠ°Π΄Π²Π°Ρ. Π‘ΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π΅ ΠΏΡΠΈΡΡΠΈΠ³Π½Π°Π»Π° Π² ΡΠ΅Π»Π΅Π²ΠΎΡΠΎ ΠΏΠΎΠ»Π΅, Π²ΡΠΈΡΠΊΠΈ ΡΠ° Π΄ΠΎΠ²ΠΎΠ»Π½ΠΈ. ΠΠ½ΠΎΠ³ΠΎ ΡΠΌΠ½ΠΈ Ρ ΠΎΡΠ° - Π²ΡΠ·ΡΠ°ΡΡΠ½ΠΈ Ρ ΠΎΡΠ° ΠΈ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»ΠΈ Π½Π° Π΅ΠΊΠΈΠΏΠΈ - ΠΏΠΈΡΠ°Ρ ΡΠ²ΠΎΠΈΡΠ΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ ΠΊΡΠΌ ΠΎΠ±Π΅ΠΊΡ, Π±Π°Π·ΠΈΡΠ°ΠΉΠΊΠΈ ΡΠ΅ Π½Π° ΡΠ°ΠΊΠ°Π²Π° Π½Π°ΠΈΠ²Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ βΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π½ΠΈβ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°ΡΠ΅Π»ΠΈ ΠΎΡ Π΅Π΄ΠΈΠ½ ΡΠΈΠΏ Π² Π΄ΡΡΠ³. Π‘ΡΡΠ½ΠΎΡΡΡΠ° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ°: Π²Π·Π΅ΠΌΠ°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ»Π΅ΡΠ°, Π²Π·Π΅ΠΌΠ°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΈΡΠ΅ΡΠΈΡΠ°ΠΌΠ΅ Π³ΠΈ: Π°ΠΊΠΎ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΡΠ»Π΅Π½ΠΎΠ²Π΅ΡΠ΅ Π½Π° ΡΠΈΠΏΠ° ΡΡΠ²ΠΏΠ°Π΄Π°Ρ, ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΌΠ΅ SetValue. ΠΡ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π²ΡΠ΅ΠΌΠ΅ ΡΠ»Π°Π²ΡΠΌΠ΅ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ°Π΄ΠΈ Π³ΡΠ΅ΡΠΊΠΈ, ΠΏΡΠΈ ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠΌΠ΅ Π½Π°ΠΌΠ΅ΡΠΈΠ»ΠΈ Π½ΡΠΊΠ°ΠΊΠ²ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π² Π΅Π΄ΠΈΠ½ ΠΎΡ ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅, Π½ΠΎ Π΄ΠΎΡΠΈ ΠΈ ΡΡΠΊ ΠΈΠΌΠ° ΠΈΠ·Ρ ΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°. ΠΠΏΠΈΡΠ°ΠΉ Π΄Π° Ρ Π²Π°Π½Π΅Ρ.
ΠΠΈΠΆΠ΄Π°Π» ΡΡΠΌ Ρ ΠΎΡΠ° Π΄Π° ΠΏΡΠ΅ΠΎΡΠΊΡΠΈΠ²Π°Ρ ΠΏΠ°ΡΡΠ΅ΡΠΈ ΠΈ ΠΊΠ°ΡΡΠΈ, Π±Π΅Π· Π΄Π° ΡΠ° Π½Π°ΠΏΡΠ»Π½ΠΎ Π²ΡΠΎΡΡΠΆΠ΅Π½ΠΈ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΡΡ ΠΌΠ°ΡΠΈΠ½ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π΄ΠΎΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΠΈ ΡΡΡ . ΠΠΈΠΆΠ΄Π°Π» ΡΡΠΌ Ρ ΠΎΡΠ° Π΄Π° ΠΊΡΠΈΡΡ ΡΠ²ΠΎΠΈΡΠ΅ Π½Π°ΠΈΠ²Π½ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π°Π΄ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ, Π·Π°Π΄ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ, Π·Π°Π΄ ΠΈΠ½ΠΆΠ΅ΠΊΡΠΈΠΈ, ΡΡΠΊΠ°Ρ ΡΠΎΠ²Π° Π±ΠΈ ΠΈΠ·Π²ΠΈΠ½ΠΈΠ»ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°Π»Π°ΡΠ° Π²Π°ΠΊΡ Π°Π½Π°Π»ΠΈΡ. ΠΠΈΡΠ½Π°Ρ ΡΠΈ Π½ΠΎΡΠ° ΠΏΡΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΎΡΡΠ·Π½Π°Π²Π°Π½ΠΈΡ. ΠΡΡΡΠ½ΠΎΡΡ Π½Π΅ ΠΈΠ·ΠΌΠ΅ΡΠΈΡ ΡΠ΅Π°Π»Π½ΠΎΡΠΎ ΠΈΠ·ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ ΠΈ, Π°ΠΊΠΎ Π±Π΅ΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠΎ-βΠΎΠΏΡΠΈΠΌΠ°Π»Π½ΠΎβ, Π°ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ Π΄Π° ΡΠ΅ Π΄ΠΎΠΊΠΎΠΏΠ°ΠΌ Π΄ΠΎ Π½Π΅Π³ΠΎ. ΠΡΠΎ Π·Π°ΡΠΎ, ΠΏΡΡΠ²ΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅ΡΠ²Π°Π½ΠΈΡ, ΡΠ°Π·Π³Π»Π΅Π΄Π°Π½ΠΈ ΠΏΠΎ-Π΄ΠΎΠ»Ρ, ΠΌΠ΅ ΠΎΠ±ΡΡΠΊΠ°Ρ Π° ΡΠ΅ΡΠΈΠΎΠ·Π½ΠΎ.
ΠΠΈΡΠ»Ρ, ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ Π²Π°Ρ, ΡΠ΅ΡΠ΅ΠΉΠΊΠΈ Π ΠΈΡ ΡΠ΅Ρ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈ ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ·ΠΈ, ΡΠ° ΡΠ΅ Π½Π°ΡΡΠΊΠ½Π°Π»ΠΈ Π½Π° Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ ΡΠ²ΡΡΠ΄Π΅Π½ΠΈΠ΅, ΡΠ΅ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π² ΠΊΠΎΠ΄Π° Π΅ ΡΠ²Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΈΠΌΠ° ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π½Π΅Π³Π°ΡΠΈΠ²Π½ΠΎ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π²ΡΡΡ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
ΠΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ½ΡΠΆΠ΄Π°Π²Π° CLR Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ ΠΏΡΠ΅Π· Π°ΡΠ΅ΠΌΠ±Π»ΠΈ, Π·Π° Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈ ΡΠ°Π·ΠΈ, ΠΎΡ ΠΊΠΎΡΡΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅, Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΈΠΌ, Π΄Π° Π³ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΈ Ρ.Π½. Π Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΡΠΈ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡΠΈ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° Π³ΠΎΠ»ΡΠΌΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ°ΠΌΠ΅Ρ. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠ°ΠΌΠ΅Ρ, CLR ΡΠ°Π·ΠΊΡΠΈΠ²Π° GC ΠΈ ΡΡΠΈΠ·ΠΎΠ²Π΅ΡΠ΅ Π·Π°ΠΏΠΎΡΠ²Π°Ρ. Π’ΡΡΠ±Π²Π° Π΄Π° Π΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌΠΎ Π±Π°Π²Π½ΠΎ, ΠΏΠΎΠ²ΡΡΠ²Π°ΠΉΡΠ΅ ΠΌΠΈ. ΠΠ³ΡΠΎΠΌΠ½ΠΈΡΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠ°ΠΌΠ΅Ρ Π½Π° ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΈ ΡΡΡΠ²ΡΡΠΈ ΠΈΠ»ΠΈ ΠΎΠ±Π»Π°ΡΠ½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΡΠ²Π°Ρ Π³ΠΎΠ»Π΅ΠΌΠΈ Π·Π°Π±Π°Π²ΡΠ½ΠΈΡ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ°. ΠΡΡΡΠ½ΠΎΡΡ, ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΠ°ΠΌΠ΅Ρ, ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π΅ Π΄Π° ΠΠΠΠΠΠΠΠΠ’Π ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ GC. ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ΅ΠΎΡΠΈΡ Π΅ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ ΡΠ΅ΡΠ²Π΅Π½ ΠΏΠ°ΡΡΠ°Π» Π·Π° Π½Π΅Π³ΠΎ.
ΠΡΠΈΡΠΊΠΈ Π½ΠΈΠ΅ ΠΎΠ±Π°ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ IoC ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ ΠΈ ΠΊΠ°ΡΡΠΈ Π·Π° Π΄Π°ΡΠ°, ΡΠΈΠΉΡΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π½Π° ΡΠ°Π±ΠΎΡΠ° ΡΡΡΠΎ ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π²Π° Π½Π° ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π½ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π½ΡΠΌΠ° Π²ΡΠΏΡΠΎΡΠΈ ΠΎΡΠ½ΠΎΡΠ½ΠΎ ΡΡΡ Π½Π°ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ. ΠΠ΅, Π½Π΅ Π·Π°ΡΠΎΡΠΎ Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ ΠΎΡ Π²ΡΠ½ΡΠ½ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠ° ΡΠΎΠ»ΠΊΠΎΠ²Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠΆΠ΅ΡΡΠ²Π°ΠΌΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π²ΡΠ² Π²ΡΠ΅ΠΊΠΈ ΡΠ»ΡΡΠ°ΠΉ. ΠΡΠΈΡΠΊΠΎ Π΅ ΠΏΠΎ-ΠΏΡΠΎΡΡΠΎ - Π½Π°ΠΈΡΡΠΈΠ½Π° Π½Π΅ Π²Π»ΠΈΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°.
Π€Π°ΠΊΡ Π΅, ΡΠ΅ Π½Π°ΠΉ-ΡΠ΅ΡΡΠΎ ΡΡΠ΅ΡΠ°Π½ΠΈΡΠ΅ ΡΠ°ΠΌΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π²Π°Ρ Π½Π° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° Π·Π° ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ ΡΡΠΈΠΊΠΎΠ²Π΅, Π·Π° Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Ρ Π½Π΅Ρ ΠΏΠΎ-ΠΎΠΏΡΠΈΠΌΠ°Π»Π½ΠΎ. ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠΎΠ²Π° Π΅ ΠΊΠ΅Ρ. ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠΎΠ²Π° ΡΠ° ΠΈΠ·ΡΠ°Π·ΠΈ ΠΈ Π΄Π΅Π»Π΅Π³Π°ΡΠΈ, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈ ΠΎΡ Π΄ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΈΠ·ΡΠ°Π·ΠΈΡΠ΅. Π‘ΡΡΠΈΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅Π½ ΠΊΠ°ΡΡΠΎΠ³ΡΠ°Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ΅Π½ ΡΠ΅ΡΠ½ΠΈΠΊ, ΠΊΠΎΠΉΡΠΎ ΡΡΠΏΠΎΡΡΠ°Π²Ρ ΡΠΈΠΏΠΎΠ²Π΅ Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Ρ Π΅Π΄ΠΈΠ½ Π² Π΄ΡΡΠ³, Π±Π΅Π· Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
ΠΠ°ΠΊ ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π° ΡΠΎΠ²Π°? ΠΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΠ²Π° Π½Π΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π° ΠΎΡ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ°, ΠΊΠΎΡΡΠΎ ΡΠ°ΠΌΠ°ΡΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° JIT ΠΊΠΎΠ΄. ΠΠΎΠ³Π°ΡΠΎ Π΄Π°Π΄Π΅Π½ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π° Π·Π° ΠΏΡΡΠ²ΠΈ ΠΏΡΡ, ΡΠΎΠΉ ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ° (ΠΈ, Π΄Π°, ΡΠΎΠ·ΠΈ ΠΏΡΠΎΡΠ΅Ρ Π½Π΅ Π΅ Π±ΡΡΠ·); ΠΏΡΠΈ ΡΠ»Π΅Π΄Π²Π°ΡΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΡ ΡΠ΅ ΠΏΡΠ΅Ρ Π²ΡΡΠ»Ρ ΠΊΡΠΌ Π²Π΅ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΈ Π½ΡΠΌΠ° Π΄Π° ΠΈΠΌΠ° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΈ Π½Π°ΠΌΠ°Π»Π΅Π½ΠΈΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°.
Π Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΎΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΡ ΡΡΡΠ°ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ ΠΊΠ°ΡΠΎ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ AOT Π΄Π²ΠΎΠΉΠ½ΠΈΡΠΈ. Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΠΏΠΎΠΌΠΎΡ ΡΠ΅ Π½ΠΈ Π΄ΠΎΠΉΠ΄Π°Ρ ΠΈΠ·ΡΠ°Π·ΠΈΡΠ΅.
ΠΡΠΏΡΠΎΡΠ½ΠΈΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠΎΡΠΌΡΠ»ΠΈΡΠ° Π½Π°ΠΊΡΠ°ΡΠΊΠΎ ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
Π’ΡΡΠ±Π²Π° Π΄Π° ΠΊΠ΅ΡΠΈΡΠ°ΡΠ΅ ΠΊΡΠ°ΠΉΠ½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΎΡ ΠΎΡΡΠ°Π·ΡΠ²Π°Π½Π΅ΡΠΎ ΠΊΠ°ΡΠΎ Π΄Π΅Π»Π΅Π³Π°Ρ, ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° ΠΈΠΌΠ° ΡΠΌΠΈΡΡΠ» Π΄Π° ΠΊΠ΅ΡΠΈΡΠ°ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΠΈΠΏΠ° Π² ΠΏΠΎΠ»Π΅ΡΠ°ΡΠ° Π½Π° Π²Π°ΡΠΈΡ ΡΠΈΠΏ, ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΠ°, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΡΡ
ΡΠ°Π½ΡΠ²Π°Ρ ΠΈΠ·Π²ΡΠ½ ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅.
Π ΡΠΎΠ²Π° ΠΈΠΌΠ° Π»ΠΎΠ³ΠΈΠΊΠ°. ΠΠ΄ΡΠ°Π²ΠΈΡΡ ΡΠ°Π·ΡΠΌ Π½ΠΈ ΠΊΠ°Π·Π²Π°, ΡΠ΅ Π°ΠΊΠΎ Π½Π΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ° ΠΈ ΠΊΠ΅ΡΠΈΡΠ°, ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ.
ΠΠ»Π΅Π΄Π°ΠΉΠΊΠΈ Π½Π°ΠΏΡΠ΅Π΄, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΊΠ°ΠΆΠ΅, ΡΠ΅ ΠΊΠ΅ΡΡΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ° ΡΠ²ΠΎΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π°, Π΄ΠΎΡΠΈ Π°ΠΊΠΎ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΡΠ°Π·ΠΈ. ΠΡΡΡΠ½ΠΎΡΡ ΡΡΠΊ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ²ΡΠ°ΡΡΠΌ ΡΠ΅Π·ΠΈΡΠ΅ Π½Π° Π°Π²ΡΠΎΡΠ° Π½Π° ΡΡΠ°ΡΠΈΡΡΠ°, Π½Π° ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΏΠΎΠ·ΠΎΠ²Π°Π²Π°ΠΌ ΠΏΠΎ-Π³ΠΎΡΠ΅.
Π‘Π΅Π³Π° Π·Π° ΠΊΠΎΠ΄Π°. ΠΠ΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π΅Π΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π²Π° Π½Π° ΠΌΠΎΡΡΠ° ΡΠΊΠΎΡΠΎΡΠ½Π° Π±ΠΎΠ»ΠΊΠ°, Ρ ΠΊΠΎΡΡΠΎ ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° ΡΠ΅ ΡΠ±Π»ΡΡΠΊΠ°ΠΌ Π² ΡΠ΅ΡΠΈΠΎΠ·Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ Π½Π° ΡΠ΅ΡΠΈΠΎΠ·Π½Π° ΠΊΡΠ΅Π΄ΠΈΡΠ½Π° ΠΈΠ½ΡΡΠΈΡΡΡΠΈΡ. ΠΡΠΈΡΠΊΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ ΡΠ° ΡΠΈΠΊΡΠΈΠ²Π½ΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ Π½ΠΈΠΊΠΎΠΉ Π΄Π° Π½Π΅ ΡΠ΅ Π΄ΠΎΡΠ΅ΡΠ°.
ΠΠΌΠ° Π½ΡΠΊΠ°ΠΊΠ²Π° ΡΡΡΠ½ΠΎΡΡ. ΠΠ΅ΠΊΠ° ΠΈΠΌΠ° ΠΠΎΠ½ΡΠ°ΠΊΡ. ΠΠΌΠ° Π±ΡΠΊΠ²ΠΈ ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΡΡΠ»ΠΎ, ΠΎΡ ΠΊΠΎΠ΅ΡΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡΡ ΠΈ Ρ ΠΈΠ΄ΡΠ°ΡΠ°ΡΠΎΡΡΡ ΡΡΠ·Π΄Π°Π²Π°Ρ ΡΡΡΠΈΡΠ΅ ΡΠ΅Π·ΠΈ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΈ. ΠΡΠΈΡΡΠΈΠ³Π½Π° ΠΏΠΈΡΠΌΠΎ, ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΠΌΠ΅ Π³ΠΎ, Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΠΌΠ΅ Π³ΠΎ Π½Π° Π΄Π²ΠΎΠΉΠΊΠΈ ΠΊΠ»ΡΡ-ΡΡΠΎΠΉΠ½ΠΎΡΡ, ΡΡΠ·Π΄Π°Π΄ΠΎΡ ΠΌΠ΅ ΠΊΠΎΠ½ΡΠ°ΠΊΡ ΠΈ Π³ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ ΠΌΠ΅ Π² Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ.
ΠΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ½ΠΎ Π΅. ΠΠ° ΠΏΡΠΈΠ΅ΠΌΠ΅ΠΌ, ΡΠ΅ Π΄Π°Π΄Π΅Π½ ΠΊΠΎΠ½ΡΠ°ΠΊΡ ΠΈΠΌΠ° ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° ΠΡΠ»Π½ΠΎ ΠΈΠΌΠ΅, ΠΡΠ·ΡΠ°ΡΡ ΠΈ Π’Π΅Π»Π΅ΡΠΎΠ½ Π·Π° Π²ΡΡΠ·ΠΊΠ°. Π’Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π°Ρ Π² ΠΏΠΈΡΠΌΠΎΡΠΎ. ΠΠΈΠ·Π½Π΅ΡΡΡ ΡΡΡΠΎ ΠΈΡΠΊΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π±ΡΡΠ·ΠΎ Π΄Π° Π΄ΠΎΠ±Π°Π²Ρ Π½ΠΎΠ²ΠΈ ΠΊΠ»ΡΡΠΎΠ²Π΅ Π·Π° ΠΊΠ°ΡΡΠΎΠ³ΡΠ°ΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡΠ° Π² Π΄Π²ΠΎΠΉΠΊΠΈ Π² ΡΡΠ»ΠΎΡΠΎ Π½Π° ΠΏΠΈΡΠΌΠΎΡΠΎ. Π ΡΠ»ΡΡΠ°ΠΉ, ΡΠ΅ Π½ΡΠΊΠΎΠΉ Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΏΠ΅ΡΠ°ΡΠ½Π° Π³ΡΠ΅ΡΠΊΠ° Π² ΡΠ°Π±Π»ΠΎΠ½Π° ΠΈΠ»ΠΈ Π°ΠΊΠΎ ΠΏΡΠ΅Π΄ΠΈ ΠΏΡΡΠΊΠ°Π½Π΅ΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΏΠ΅ΡΠ½ΠΎ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΠΊΠ°ΡΡΠΎΠ³ΡΠ°ΡΠΈΡΠ°Π½Π΅ ΠΎΡ Π½ΠΎΠ² ΠΏΠ°ΡΡΠ½ΡΠΎΡ, ΠΊΠ°ΡΠΎ ΡΠ΅ Π°Π΄Π°ΠΏΡΠΈΡΠ°ΡΠ΅ ΠΊΡΠΌ Π½ΠΎΠ²ΠΈΡ ΡΠΎΡΠΌΠ°Ρ. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½ΠΎΠ²Π° ΠΊΠΎΡΠ΅Π»Π°ΡΠΈΡ Π½Π° ΠΊΠ°ΡΡΠΎΠ³ΡΠ°ΡΠΈΡΠ°Π½Π΅ ΠΊΠ°ΡΠΎ Π΅Π²ΡΠΈΠ½Π° ΠΊΠΎΡΠ΅ΠΊΡΠΈΡ Π½Π° Π΄Π°Π½Π½ΠΈ. Π’ΠΎΠ΅ΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡ ΠΆΠΈΠ²ΠΎΡΠ°.
ΠΠ½Π΅Π΄ΡΡΠ²Π°ΠΌΠ΅, ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅. ΠΡΡΡΠΈ ΡΠ°Π±ΠΎΡΠ°.
ΠΡΠΌΠ° Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΊΠΎΠ΄Π°: ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ ΠΈ ΡΠ΅ ΡΠ° Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π² GitHub ΡΡΠ΅Π· Π²ΡΡΠ·ΠΊΠ°ΡΠ° Π² ΠΊΡΠ°Ρ Π½Π° ΡΡΠ°ΡΠΈΡΡΠ°. ΠΠΎΠΆΠ΅Ρ Π΄Π° Π³ΠΈ ΡΠΎΠ²Π°ΡΠΈΡ, ΠΈΠ·ΠΌΡΡΠ²Π°Ρ Π΄ΠΎ Π½Π΅ΡΠ·Π½Π°Π²Π°Π΅ΠΌΠΎΡΡ ΠΈ Π΄Π° Π³ΠΈ ΠΌΠ΅ΡΠΈΡ, ΠΊΠ°ΠΊΡΠΎ Π±ΠΈ ΡΠ΅ ΠΎΡΡΠ°Π·ΠΈΠ»ΠΎ Π² ΡΠ²ΠΎΡ ΡΠ»ΡΡΠ°ΠΉ. Π©Π΅ Π΄Π°ΠΌ ΡΠ°ΠΌΠΎ ΠΊΠΎΠ΄Π° Π½Π° Π΄Π²Π° ΡΠ°Π±Π»ΠΎΠ½Π½ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΊΠΎΠΈΡΠΎ ΡΠ°Π·Π³ΡΠ°Π½ΠΈΡΠ°Π²Π°Ρ Ρ ΠΈΠ΄ΡΠ°ΡΠ°ΡΠΎΡΠ°, ΠΊΠΎΠΉΡΠΎ ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π±ΡΡΠ·, ΠΎΡ Ρ ΠΈΠ΄ΡΠ°ΡΠ°ΡΠΎΡΠ°, ΠΊΠΎΠΉΡΠΎ ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π±Π°Π²Π΅Π½.
ΠΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ°: ΠΌΠ΅ΡΠΎΠ΄ΡΡ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π° Π΄Π²ΠΎΠΉΠΊΠΈ, Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈ ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ° Π½Π° Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ°. Π‘Π»ΠΎΡΡ LINQ Π΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡΡ ΠΈ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ° Π½Π° Ρ ΠΈΠ΄ΡΠ°ΡΠ°ΡΠΎΡΠ°, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ°Π²ΠΈ Π·Π°ΡΠ²ΠΊΠ° ΠΊΡΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΠΈ ΡΡΠ°Π²Π½ΡΠ²Π° ΠΊΠ»ΡΡΠΎΠ²Π΅ Ρ Π΄Π²ΠΎΠΉΠΊΠΈ ΠΎΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ° (Π·Π° ΡΠ΅Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠΌΠ° ΠΊΠΎΠ΄ Π±Π΅Π· LINQ Π·Π° ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅). Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π΄Π²ΠΎΠΉΠΊΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π°Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ Π½Π° Ρ ΠΈΠ΄ΡΠ°ΡΠ°ΡΠΈΡ ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Π΄Π²ΠΎΠΉΠΊΠΈΡΠ΅ ΡΠ΅ Π·Π°Π΄Π°Π²Π°Ρ Π½Π° ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π½Π° ΠΎΠ±Π΅ΠΊΡΠ°.
βΠΡΡΠ·β (ΠΡΠ΅ΡΠΈΠΊΡ ΠΡΡΠ· Π² Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ²Π΅):
protected override Contact GetContact(PropertyToValueCorrelation[] correlations)
{
var contact = new Contact();
foreach (var setterMapItem in _proprtySettersMap)
{
var correlation = correlations.FirstOrDefault(x => x.PropertyName == setterMapItem.Key);
setterMapItem.Value(contact, correlation?.Value);
}
return contact;
}
ΠΠ°ΠΊΡΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅ ΡΡΠ°ΡΠΈΡΠ½Π° ΠΊΠΎΠ»Π΅ΠΊΡΠΈΡ ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π½Π° ΡΠ΅ΡΠ΅Ρ - ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈ Π»Π°ΠΌΠ±Π΄Π°, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ ΠΎΠ±Π΅ΠΊΡΠ° Π½Π° ΡΠ΅ΡΠ΅Ρ. Π‘ΡΠ·Π΄Π°Π΄Π΅Π½ ΠΎΡ ΡΠ»Π΅Π΄Π½ΠΈΡ ΠΊΠΎΠ΄:
static FastContactHydrator()
{
var type = typeof(Contact);
foreach (var property in type.GetProperties())
{
_proprtySettersMap[property.Name] = GetSetterAction(property);
}
}
private static Action<Contact, string> GetSetterAction(PropertyInfo property)
{
var setterInfo = property.GetSetMethod();
var paramValueOriginal = Expression.Parameter(property.PropertyType, "value");
var paramEntity = Expression.Parameter(typeof(Contact), "entity");
var setterExp = Expression.Call(paramEntity, setterInfo, paramValueOriginal).Reduce();
var lambda = (Expression<Action<Contact, string>>)Expression.Lambda(setterExp, paramEntity, paramValueOriginal);
return lambda.Compile();
}
Π ΠΎΠ±ΡΠΈ Π»ΠΈΠ½ΠΈΠΈ Π΅ ΡΡΠ½ΠΎ. ΠΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ ΠΏΡΠ΅Π· ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ°, ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π΄Π΅Π»Π΅Π³Π°ΡΠΈ Π·Π° ΡΡΡ , ΠΊΠΎΠΈΡΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ ΡΠ΅ΡΠ΅ΡΠΈ, ΠΈ Π³ΠΈ Π·Π°ΠΏΠ°Π·Π²Π°ΠΌΠ΅. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΎΠ±Π°ΠΆΠ΄Π°ΠΌΠ΅, ΠΊΠΎΠ³Π°ΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ.
βΠΠ°Π²Π½ΠΎβ (ΠΡΠ΅ΡΠΈΠΊΡ ΠΠ°Π²Π΅Π½ Π² Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ²Π΅):
protected override Contact GetContact(PropertyToValueCorrelation[] correlations)
{
var contact = new Contact();
foreach (var property in _properties)
{
var correlation = correlations.FirstOrDefault(x => x.PropertyName == property.Name);
if (correlation?.Value == null)
continue;
property.SetValue(contact, correlation.Value);
}
return contact;
}
Π’ΡΠΊ Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ Π·Π°ΠΎΠ±ΠΈΠΊΠ°Π»ΡΠΌΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΠΌΠ΅ SetValue.
ΠΠ° ΡΡΠ½ΠΎΡΠ° ΠΈ ΠΊΠ°ΡΠΎ ΡΠΏΡΠ°Π²ΠΊΠ° Π²Π½Π΅Π΄ΡΠΈΡ Π½Π°ΠΈΠ²Π΅Π½ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ Π·Π°ΠΏΠΈΡΠ²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΠ΅Ρ Π½ΠΈΡΠ΅ ΠΊΠΎΡΠ΅Π»Π°ΡΠΈΠΎΠ½Π½ΠΈ Π΄Π²ΠΎΠΉΠΊΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π² ΠΏΠΎΠ»Π΅ΡΠ°ΡΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡΠ°. ΠΡΠ΅ΡΠΈΠΊΡ β Π ΡΡΠ½ΠΎ.
Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Π²Π·Π΅ΠΌΠ΅ΠΌ BenchmarkDotNet ΠΈ Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°. Π ΠΈΠ·Π²Π΅Π΄Π½ΡΠΆ... (ΡΠΏΠΎΠΉΠ»Π΅Ρ - ΡΠΎΠ²Π° Π½Π΅ Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ, ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈΡΠ΅ ΡΠ° ΠΏΠΎ-Π΄ΠΎΠ»Ρ)
ΠΠ°ΠΊΠ²ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΡΡΠΊ? ΠΠ΅ΡΠΎΠ΄ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΠΈΡΠΌΡΠ°Π»Π½ΠΎ Π½ΠΎΡΡΡ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° Fast, ΡΠ΅ ΠΎΠΊΠ°Π·Π²Π°Ρ ΠΏΠΎ-Π±Π°Π²Π½ΠΈ Π² ΠΏΠΎΡΡΠΈ Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈ ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ Ρ ΠΏΡΠ΅ΡΠΈΠΊΡ Slow. Π’ΠΎΠ²Π° Π²Π°ΠΆΠΈ ΠΊΠ°ΠΊΡΠΎ Π·Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΡΠΎ, ΡΠ°ΠΊΠ° ΠΈ Π·Π° ΡΠΊΠΎΡΠΎΡΡΡΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ°. ΠΡ Π΄ΡΡΠ³Π° ΡΡΡΠ°Π½Π°, ΠΊΡΠ°ΡΠΈΠ²ΠΎΡΠΎ ΠΈ Π΅Π»Π΅Π³Π°Π½ΡΠ½ΠΎ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠ°ΡΡΠΎΠ³ΡΠ°ΡΠΈΡΠ°Π½Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° LINQ ΠΌΠ΅ΡΠΎΠ΄ΠΈ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈ Π·Π° ΡΠΎΠ²Π°, ΠΊΡΠ΄Π΅ΡΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡΠΎΡΠΈΠ², Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π½Π°ΠΌΠ°Π»ΡΠ²Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°. Π Π°Π·Π»ΠΈΠΊΠ°ΡΠ° Π΅ ΠΎΡ ΡΠ΅Π΄. Π’Π΅Π½Π΄Π΅Π½ΡΠΈΡΡΠ° Π½Π΅ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Ρ Ρ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ Π±ΡΠΎΠΉ ΠΏΠ°ΡΠΎΠ²Π΅. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π°ΡΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° Π΅ Π² ΠΌΠ°ΡΠ°Π±Π°. Π‘ LINQ Π΅ 4 - 200 ΠΏΡΡΠΈ ΠΏΠΎ-Π±Π°Π²Π½ΠΎ, ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ Π±ΠΎΠΊΠ»ΡΠΊ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ Π² ΡΡΡΠΈΡ ΠΌΠ°ΡΠ°Π±.
ΠΠΠ’Π£ΠΠΠΠΠΠ ΠΠ
ΠΠ΅ ΠΏΠΎΠ²ΡΡΠ²Π°Ρ
Π½Π° ΠΎΡΠΈΡΠ΅ ΡΠΈ, Π½ΠΎ ΠΏΠΎ-Π²Π°ΠΆΠ½ΠΎΡΠΎ Π΅, ΡΠ΅ Π½Π°ΡΠΈΡΡ ΠΊΠΎΠ»Π΅Π³Π° Π½Π΅ ΠΏΠΎΠ²ΡΡΠ²Π° Π½ΠΈΡΠΎ Π½Π° ΠΎΡΠΈΡΠ΅ ΠΌΠΈ, Π½ΠΈΡΠΎ Π½Π° ΠΊΠΎΠ΄Π° ΠΌΠΈ -
ΠΡΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΎΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΈΡ ΡΠ΅ΡΡ:
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅: ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΡΠ΅Π΄ΠΏΡΠΈΡΡΠΈΠ΅, Π½ΡΠΌΠ° ΠΎΡΠΎΠ±Π΅Π½Π° Π½ΡΠΆΠ΄Π° Π΄Π° ΠΏΡΠΈΠ±ΡΠ³Π²Π°ΡΠ΅ Π΄ΠΎ ΡΡΠΈΠΊΠΎΠ²Π΅ - LINQ ΡΠ΅ ΠΈΠ·ΡΠ΄Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π² ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ Ρ Π²ΠΈΡΠΎΠΊΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠΏΠ΅ΡΡΠΈΡΠ΅ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠΈ ΠΈ Π΄Π΅Π»Π΅Π³Π°ΡΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΡΡ βΠ±ΡΡΠ·Π°β Π»ΠΎΠ³ΠΈΠΊΠ°. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠ΅ ΠΊΠ°ΠΊΡΠΎ Π³ΡΠ²ΠΊΠ°Π²ΠΎΡΡΡΠ° Π½Π° ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΡΠ°ΠΊΠ° ΠΈ ΡΠΊΠΎΡΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
ΠΠΎΠ΄ΡΡ Π·Π° Π±Π΅Π½ΡΠΌΠ°ΡΠΊ Π΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΡΠΊ. ΠΡΠ΅ΠΊΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈ ΠΎΡΠ½ΠΎΠ²ΠΎ Π΄ΡΠΌΠΈΡΠ΅ ΠΌΠΈ:
PS: ΠΊΠΎΠ΄ΡΡ Π² ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° IoC, Π° Π² Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ²Π΅ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠ·ΡΠΈΡΠ½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ. Π€Π°ΠΊΡ Π΅, ΡΠ΅ ΠΏΡΠΈ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»Π½ΠΎΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΡΡΡΠ·Π°Ρ Π²ΡΠΈΡΠΊΠΈ ΡΠ°ΠΊΡΠΎΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π±ΠΈΡ Π° ΠΌΠΎΠ³Π»ΠΈ Π΄Π° ΠΏΠΎΠ²Π»ΠΈΡΡΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° ΠΈ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΡΡ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΡΡΠΌΠ΅Π½.
PPS: ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
PPPS: Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ°ΡΠ΅Π»Π½ΠΈΡ ΡΠΈΡΠ°ΡΠ΅Π», ΠΊΠΎΠΉΡΠΎ ΡΡΠΈΠ³Π½Π° Π΄ΠΎ Π΄ΡΠ½ΠΎΡΠΎ Π½Π° ΡΡΠΈΠ»Π° ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½Π°. ΠΠ· ΡΡΠΌ Π·Π° Π΅Π΄Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠ΅ ΠΈ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ. ΠΠΈΠΏΠ»ΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡΡΠ° ΠΎΡΡΠ°Π²Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π° ΡΠ΅ ΠΆΠ΅Π»Π°Π΅, Π½ΠΎ Π²Π·Π΅Ρ
ΠΊΡΠΈΡΠΈΠΊΠ°ΡΠ° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄. ΠΠΈΡΠ°ΠΌ Π·Π° ΡΠ½Π°ΡΡΠ΄Π°.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com