ΠΠ΅Π΄Π½Π°Ρ ΡΠ΅ Π³ΠΎ ΠΎΠ±ΡΠ°ΡΠ½Π°ΠΌ Π½Π°ΡΠ»ΠΎΠ²ΠΎΡ Π½Π° ΡΡΠ°ΡΠΈΡΠ°ΡΠ°. ΠΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΠΎΡ ΠΏΠ»Π°Π½ Π±Π΅ΡΠ΅ Π΄Π° ΡΠ΅ Π΄Π°Π΄Π΅ Π΄ΠΎΠ±Π°Ρ, ΡΠΈΠ³ΡΡΠ΅Π½ ΡΠΎΠ²Π΅Ρ ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ Π·Π°Π±ΡΠ·Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΡΠΎ Π½Π° ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡΠ°ΡΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π΅Π½, Π½ΠΎ ΡΠ΅Π°Π»Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ, Π½ΠΎ Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈΠ½Π³ΠΎΡ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ° Π΄Π΅ΠΊΠ° ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡΠ°ΡΠ° Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΡ Π±Π°Π²Π½Π° ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΠΌΠΈΡΠ»Π΅Π², 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