Π‘ΡΠ°Π·Ρ ΠΎΠ±ΡΡΡΠ½Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΡΠ°ΡΡΠΈ. ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π»ΠΎΡΡ Π΄Π°ΡΡ Ρ
ΠΎΡΠΎΡΠΈΠΉ, Π½Π°Π΄Π΅ΠΆΠ½ΡΠΉ ΡΠΎΠ²Π΅Ρ ΠΏΠΎ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠ»Π΅ΠΊΡΠ΅Π½Π° Π½Π° ΠΏΡΠΎΡΡΠΎΠΌ, Π½ΠΎ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Ρ
ΠΎΠ΄Π΅ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈΠ½Π³Π° Π²ΡΡΡΠ½ΠΈΠ»ΠΎΡΡ, ΡΡΠΎ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π΅ ΡΠ°ΠΊ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, ΠΊΠ°ΠΊ Ρ Π΄ΡΠΌΠ°Π», LINQ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, ΡΠ΅ΠΌ ΡΠ½ΠΈΠ»ΠΎΡΡ Π² ΠΊΠΎΡΠΌΠ°ΡΠ°Ρ
. Π Π² ΠΈΡΠΎΠ³Π΅ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ, ΡΡΠΎ ΠΌΠ½ΠΎΠΉ Π΅ΡΠ΅ ΠΈ Π±ΡΠ»Π° Π΄ΠΎΠΏΡΡΠ΅Π½Π° ΠΎΡΠΈΠ±ΠΊΠ° Π² Π·Π°ΠΌΠ΅ΡΠ°Ρ
β¦ ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΡΠΎΠΉ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠΉ ΠΈΡΡΠΎΡΠΈΠΈ ΠΏΠΎΠ΄ ΠΊΠ°ΡΠΎΠΌ ΠΈ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ
. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΈΠΌΠ΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΡΡΠΎΠ²ΠΎΠΉ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π² ΡΠ½ΡΠ΅ΡΠΏΡΠ°ΠΉΠ·Π΅, ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°Ρ, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ ΠΆΠΈΠ·Π½ΠΈ: Π²Π»ΠΈΡΠ½ΠΈΡ Π½Π° ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ° ΡΡΠ°ΡΡΠΈ Π±ΡΠ»ΠΎ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠ½ΠΎ ΠΈΠ·-Π·Π° Π²Π½Π΅ΡΠ½Π΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ: Moq, Autofac, EF Core ΠΈ ΠΏΡΠΎΡΠ΅ΠΉ Β«ΠΎΠ±Π²ΡΠ·ΠΊΠΈΒ».
ΠΠ°ΡΠ°Π» Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΠ΄ Π²ΠΏΠ΅ΡΠ°ΡΠ»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡ ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ:
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, Π°Π²ΡΠΎΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π΅Π»Π΅Π³Π°ΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΡΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ ΡΠΈΠΏΠΎΠ² ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊ ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΈΠ»ΡΠ½ΠΎ ΡΡΠΊΠΎΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΡΡ ΡΠ°ΠΌ Π΅ΡΠ΅, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, IL ΡΠΌΠΈΡΡΠΈΡ, Π½ΠΎ Π΅Ρ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°ΠΌΡΠΉ ΡΡΡΠ΄ΠΎΠ·Π°ΡΡΠ°ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ΅Π²Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ.
Π£ΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ Ρ ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°Π»ΡΡ Π²ΡΠ΅Π³Π΄Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΌΠ½Π΅Π½ΠΈΡ ΠΎ ΡΠΊΠΎΡΠΎΡΡΠΈ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ, ΠΎΡΠΎΠ±ΠΎ ΡΡΠ°Π²ΠΈΡΡ ΠΏΠΎΠ΄ ΡΠΎΠΌΠ½Π΅Π½ΠΈΡ Π²ΡΠ²ΠΎΠ΄Ρ Π°Π²ΡΠΎΡΠ° Ρ Π½Π΅ ΡΠΎΠ±ΠΈΡΠ°Π»ΡΡ.
Π― Π½Π΅ ΡΠ΅Π΄ΠΊΠΎ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡ Ρ Π½Π°ΠΈΠ²Π½ΡΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ Π² ΡΠ½ΡΠ΅ΡΠΏΡΠ°ΠΉΠ·Π΅. ΠΠ΅ΡΠ΅ΡΡΡ ΡΠΈΠΏ. ΠΠ΅ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π΅. ΠΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ SetValue, ΠΈ Π²ΡΠ΅ ΡΠ°Π΄ΡΡΡΡΡ. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ»Π΅ΡΠ΅Π»ΠΎ Π² ΡΠ΅Π»Π΅Π²ΠΎΠ΅ ΠΏΠΎΠ»Π΅, Π²ΡΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½Ρ. ΠΡΠ΄ΠΈ Π²Π΅ΡΡΠΌΠ° Π½Π΅Π³Π»ΡΠΏΡΠ΅ β ΡΠΈΠ½ΠΈΠΎΡΡ ΠΈ ΡΠΈΠΌΠ»ΠΈΠ΄Ρ β ΠΏΠΈΡΡΡ ΡΠ²ΠΎΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π½Π° object, ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Ρ Π½Π° ΡΠ°ΠΊΠΎΠΉ Π½Π°ΠΈΠ²Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Β«ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠ΅Β» ΠΌΠ°ΠΏΠΏΠ΅ΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π² Π΄ΡΡΠ³ΠΎΠΉ. Π‘ΡΡΡ ΡΠ°ΠΊΠΎΠ²Π° ΠΎΠ±ΡΡΠ½ΠΎ: Π±Π΅ΡΠ΅ΠΌ Π²ΡΠ΅ ΠΏΠΎΠ»Ρ, Π±Π΅ΡΠ΅ΠΌ Π²ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΈΡΠ΅ΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎ Π½ΠΈΠΌ: ΠΏΡΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΈ ΠΈΠΌΠ΅Π½ ΡΠ»Π΅Π½ΠΎΠ² ΡΠΈΠΏΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ SetValue. ΠΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ Π»ΠΎΠ²ΠΈΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π° ΠΏΡΠΎΠΌΠ°Ρ Π°Ρ ΡΠ°ΠΌ, Π³Π΄Π΅ Π½Π΅ Π½Π°ΡΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠΈΠΏΠΎΠ², Π½ΠΎ ΠΈ ΡΡΡ Π΅ΡΡΡ Π²ΡΡ ΠΎΠ΄, Π΄ΠΎΠ±ΠΈΠ²Π°ΡΡΠΈΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. Try/catch.
Π― Π²ΠΈΠ΄Π΅Π», ΠΊΠ°ΠΊ Π»ΡΠ΄ΠΈ ΠΏΠ΅ΡΠ΅ΠΈΠ·ΠΎΠ±ΡΠ΅ΡΠ°ΡΡ ΠΏΠ°ΡΡΠ΅ΡΡ ΠΈ ΠΌΠ°ΠΏΠΏΠ΅ΡΡ, Π½Π΅ Π±ΡΠ΄ΡΡΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π²ΠΎΠΎΡΡΠΆΠ΅Π½Π½ΡΠΌΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ΅ΡΠ΅Π½Π½ΡΠ΅ Π΄ΠΎ Π½ΠΈΡ Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄Ρ. Π― Π²ΠΈΠ΄Π΅Π», ΠΊΠ°ΠΊ Π»ΡΠ΄ΠΈ ΠΏΡΡΡΡΡ ΡΠ²ΠΎΠΈ Π½Π°ΠΈΠ²Π½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π° ΡΡΡΠ°ΡΠ΅Π³ΠΈΡΠΌΠΈ, Π·Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°ΠΌΠΈ, Π·Π° ΠΈΠ½ΡΠ΅ΠΊΡΠΈΡΠΌΠΈ, ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΡΡΠΎ ΠΈΠ·Π²ΠΈΠ½ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΡΡ Π²Π°ΠΊΡ Π°Π½Π°Π»ΠΈΡ. ΠΡ ΡΠ°ΠΊΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ Ρ Π²ΠΎΡΠΎΡΠΈΠ» Π½ΠΎΡ. ΠΠΎ ΡΠ°ΠΊΡΡ, ΡΠ΅Π°Π»ΡΠ½ΡΡ ΡΡΠ΅ΡΠΊΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Ρ Π½Π΅ Π·Π°ΠΌΠ΅ΡΡΠ», ΠΈ ΠΏΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΡΡΠΎ ΠΌΠ΅Π½ΡΠ» ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ Β«ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΡΒ», Π΅ΡΠ»ΠΈ ΡΡΠΊΠΈ Π΄ΠΎΡ ΠΎΠ΄ΠΈΠ»ΠΈ. ΠΠΎΡΠΎΠΌΡ ΠΏΠ΅ΡΠ²ΡΠ΅ Π·Π°ΠΌΠ΅ΡΡ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ΄Π΅Ρ ΡΠ΅ΡΡ Π½ΠΈΠΆΠ΅, ΠΌΠ΅Π½Ρ ΡΠ΅ΡΡΡΠ·Π½ΠΎ ΡΠΌΡΡΠΈΠ»ΠΈ.
ΠΡΠΌΠ°Ρ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π²Π°Ρ, ΡΠΈΡΠ°Ρ Π ΠΈΡ ΡΠ΅ΡΠ° ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ³ΠΎΠ², ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡ ΡΠΎ Π²ΠΏΠΎΠ»Π½Π΅ ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΡΠΌ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ, ΡΡΠΎ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡ Π² ΠΊΠΎΠ΄Π΅ β ΡΡΠΎ ΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΡΠ°ΠΉΠ½Π΅ Π½Π΅Π³Π°ΡΠΈΠ²Π½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π΅ΡΡ Π½Π° ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΡΠ·ΠΎΠ² ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π²ΡΠ½ΡΠΆΠ΄Π°Π΅Ρ CLR ΠΎΠ±Ρ ΠΎΠ΄ΠΈΡΡ ΡΠ±ΠΎΡΠΊΠΈ Π² ΠΏΠΎΠΈΡΠΊΠ°Ρ Π½ΡΠΆΠ½ΠΎΠΉ, ΠΏΠΎΠ΄ΡΡΠ³ΠΈΠ²Π°ΡΡ ΠΈΡ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅, ΠΏΠ°ΡΡΠΈΡΡ ΠΈΡ ΠΈ Ρ.Π΄. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠ±Ρ ΠΎΠ΄Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π°Π»Π»ΠΎΠΊΠ°ΡΠΈΠΈ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ° ΠΏΠ°ΠΌΡΡΠΈ. Π Π°ΡΡ ΠΎΠ΄ΡΠ΅ΠΌ ΠΏΠ°ΠΌΡΡΡ, CLR ΡΠ°ΡΡΠ΅Ρ Π»ΡΠ΅Ρ ΠΠ¦ ΠΈ ΠΏΠΎΠ½Π΅ΡΠ»ΠΈΡΡ ΡΡΠΈΠ·Ρ. ΠΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π·Π°ΠΌΠ΅ΡΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, ΠΏΠΎΠ²Π΅ΡΡΡΠ΅. ΠΠ³ΡΠΎΠΌΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΌΡ ΠΏΠ°ΠΌΡΡΠΈ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΈΠ»ΠΈ ΠΎΠ±Π»Π°ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ Π½Π΅ ΡΠΏΠ°ΡΠ°ΡΡ ΠΎΡ Π²ΡΡΠΎΠΊΠΈΡ Π·Π°Π΄Π΅ΡΠΆΠ΅ΠΊ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠ°ΠΌΡΡΠΈ, ΡΠ΅ΠΌ Π²ΡΡΠ΅ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ, ΡΡΠΎ Π²Ρ ΠΠΠΠΠ’ΠΠ’Π, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΠ¦. Π Π΅ΡΠ»Π΅ΠΊΡΠΈΡ β ΡΡΠΎ, ΠΏΠΎ ΠΈΠ΄Π΅Π΅, Π»ΠΈΡΠ½ΡΡ ΠΊΡΠ°ΡΠ½Π°Ρ ΡΡΡΠΏΠΊΠ° Π΄Π»Ρ Π½Π΅Π³ΠΎ.
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π²ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΈ IoC ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ, ΠΈ Π΄Π°ΡΠ° ΠΌΠ°ΠΏΠΏΠ΅ΡΡ, ΠΏΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π±ΠΎΡΡ ΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΠΊ ΠΆΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²ΠΎΠΏΡΠΎΡΠΎΠ² ΠΊ ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ. ΠΠ΅Ρ, Π½Π΅ ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΈ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΡΡΠΎΠ»Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π²Π΅ΡΠΈ, ΡΡΠΎ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΎΠΌ Π½Π°ΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΆΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅. ΠΡΠ΅ ΠΏΡΠΎΡΠ΅ β ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠ΅ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π½Ρ Π½Π° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π²ΡΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΡ ΠΈΡΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ Π½Π΅ΠΉ. ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ ΠΊΠ΅Ρ. ΠΠ±ΡΡΠ½ΠΎ β ΡΡΠΎ Expressions ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΈΠ· Π΄Π΅ΡΠ΅Π²Π° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π΄Π΅Π»Π΅Π³Π°ΡΡ. Π’ΠΎΡ ΠΆΠ΅ Π°Π²ΡΠΎΠΌΠ°ΠΏΠΏΠ΅Ρ Π΄Π΅ΡΠΆΠΈΡ ΠΏΠΎΠ΄ ΡΠΎΠ±ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΡΠΉ ΡΠ»ΠΎΠ²Π°ΡΡ, ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΈΠΏΡ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΎΠ΄ΠΈΠ½ Π² Π΄ΡΡΠ³ΠΎΠΉ ΡΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΆΠ΅ Π±Π΅Π· Π²ΡΠ·ΠΎΠ²Π° ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ.
ΠΠ°ΠΊ ΡΡΠΎ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ? ΠΠΎ ΡΡΡΠΈ, ΡΡΠΎ Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ Π»ΠΎΠ³ΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°ΠΌΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° JIT. ΠΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π°, ΡΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ (ΠΈ, Π΄Π°, ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π΅ Π±ΡΡΡΡΡΠΉ), ΠΏΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π²ΡΠ·ΠΎΠ²Π°Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΠΆΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΈ ΡΡΡ ΠΎΡΠΎΠ±ΡΡ ΠΏΡΠΎΡΠ°Π΄ΠΎΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π½Π΅ Π±ΡΠ΄Π΅Ρ.
Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ JIT ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ ΠΈ ΠΏΠΎΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ, ΡΡΠΎ ΠΈ Π΅Π³ΠΎ AOT Π°Π½Π°Π»ΠΎΠ³ΠΈ. ΠΠ° ΠΏΠΎΠΌΠΎΡΡ Π½Π°ΠΌ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΈΠ΄ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ.
ΠΡΠ°ΡΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΠ΄Π΅Ρ ΡΠ΅ΡΡ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ Π² Π²ΠΈΠ΄Π΅ Π΄Π΅Π»Π΅Π³Π°ΡΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ. ΠΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΎ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡΠΌΠΈ ΠΎ ΡΠΈΠΏΠ°Ρ
ΡΠΎΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌΡΡ
Π²Π½Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΠΎΠ»ΡΡ
Π²Π°ΡΠ΅Π³ΠΎ ΡΠΈΠΏΠ° β Π²ΠΎΡΠΊΠ΅ΡΠ°.
ΠΠΎΠ³ΠΈΠΊΠ° Π² ΡΡΠΎΠΌ Π΅ΡΡΡ. ΠΠ΄ΡΠ°Π²ΡΠΉ ΡΠΌΡΡΠ» Π½Π°ΠΌ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π·Π°ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΠΎ ΡΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ.
ΠΠ°Π±Π΅Π³Π°Ρ Π²ΠΏΠ΅ΡΠ΅Π΄, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΊΠ΅Ρ Π² ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠ΅ΠΉ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΈ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΡΡ Ρ ΠΏΡΠΎΡΡ ΠΏΠΎΠΎΠ²ΡΠΎΡΡΡ ΡΠ΅Π·ΠΈΡΡ Π°Π²ΡΠΎΡΠ° ΡΡΠ°ΡΡΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΡΡΠ»Π°ΡΡΡ Π²ΡΡΠ΅.
Π’Π΅ΠΏΠ΅ΡΡ ΠΎ ΠΊΠΎΠ΄Π΅. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΠΌΠΎΠ΅ΠΉ Π½Π΅Π΄Π°Π²Π½Π΅ΠΉ Π±ΠΎΠ»ΠΈ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ Π² ΡΠ΅ΡΡΡΠ·Π½ΠΎΠΌ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅ ΡΠ΅ΡΡΡΠ·Π½ΠΎΠΉ ΠΊΡΠ΅Π΄ΠΈΡΠ½ΠΎΠΉ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠ΅ ΡΠ½ΡΠΈΡΠΈ Π²ΡΠΌΡΡΠ»Π΅Π½Π½ΡΠ΅, ΡΡΠΎΠ±Ρ Π½ΠΈΠΊΡΠΎ Π½Π΅ Π΄ΠΎΠ³Π°Π΄Π°Π»ΡΡ.
ΠΡΡΡ Π½Π΅ΠΊΠ°Ρ ΡΡΡΠ½ΠΎΡΡΡ. ΠΡΡΡΡ Π±ΡΠ΄Π΅Ρ Contact. ΠΡΡΡ ΠΏΠΈΡΡΠΌΠ° ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΡΠ΅Π»ΠΎΠΌ, ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΏΠ°ΡΡΠ΅Ρ ΠΈ Π³ΠΈΠ΄ΡΠ°ΡΠΎΡ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠΈ ΡΠ°ΠΌΡΠ΅ ΠΊΠΎΠ½ΡΠ°ΠΊΡΡ. ΠΡΠΈΡΠ»ΠΎ ΠΏΠΈΡΡΠΌΠΎ, ΠΌΡ Π΅Π³ΠΎ ΠΏΡΠΎΡΠΈΡΠ°Π»ΠΈ, ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈ Π½Π° ΠΏΠ°ΡΡ ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΎΠ·Π΄Π°Π»ΠΈ ΠΊΠΎΠ½ΡΠ°ΠΊΡ, ΡΠΎΡ ΡΠ°Π½ΠΈΠ»ΠΈ Π² Π±Π΄.
ΠΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ½ΠΎ. ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ° Π΅ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π€ΠΠ, ΠΠΎΠ·ΡΠ°ΡΡ ΠΈ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ½ΡΠΉ ΡΠ΅Π»Π΅ΡΠΎΠ½. ΠΡΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π² ΠΏΠΈΡΡΠΌΠ΅. Π’Π°ΠΊ ΠΆΠ΅ Π±ΠΈΠ·Π½Π΅Ρ Ρ ΠΎΡΠ΅Ρ, ΡΡΠΎΠ±Ρ ΡΠ°ΠΏΠΏΠΎΡΡΡ ΠΌΠΎΠ³Π»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΊΠ»ΡΡΠΈ Π΄Π»Ρ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° ΡΠ²ΠΎΠΉΡΡΠ² ΡΠ½ΡΠΈΡΠΈ Π½Π° ΠΏΠ°ΡΡ Π² ΡΠ΅Π»Π΅ ΠΏΠΈΡΡΠΌΠ°. ΠΠ° ΡΠΎΡ ΡΠ»ΡΡΠ°ΠΉ, Π΅ΡΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠ°Π»ΡΡ Π² ΡΠ°Π±Π»ΠΎΠ½Π΅ ΠΈΠ»ΠΈ Π΅ΡΠ»ΠΈ Π΄ΠΎ ΡΠ΅Π»ΠΈΠ·Π° Π½Π°Π΄ΠΎ Π±ΡΠ΄Π΅Ρ ΡΡΠΎΡΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ ΠΎΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ°ΡΡΠ½Π΅ΡΠ°, ΠΏΠΎΠ΄ΡΡΡΠΎΠΈΠ²ΡΠΈΡΡ ΠΏΠΎΠ΄ Π½ΠΎΠ²ΡΠΉ ΡΠΎΡΠΌΠ°Ρ. Π’ΠΎΠ³Π΄Π° Π½ΠΎΠ²ΡΡ ΠΊΠΎΡΡΠ΅Π»ΡΡΠΈΡ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠ°ΠΊ Π΄Π΅ΡΠ΅Π²ΡΠΉ Π΄Π°ΡΠ°ΡΠΈΠΊΡ. Π’ΠΎ Π΅ΡΡΡ, ΠΏΡΠΈΠΌΠ΅Ρ ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΉ.
Π Π΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ, ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠ΅ΡΡΡ. Π Π°Π±ΠΎΡΠ°Π΅Ρ.
ΠΠΎΠ΄ Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ Π½Π΅ Π±ΡΠ΄Ρ: ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΎΠ² ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈ ΠΎΠ½ΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π½Π° GitHub ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΡΠ°ΡΡΠΈ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡ Π·Π°Π³ΡΡΠ·ΠΈΡΡ, Π·Π°ΠΌΡΡΠΈΡΡ Π΄ΠΎ Π½Π΅ΡΠ·Π½Π°Π²Π°Π΅ΠΌΠΎΡΡΠΈ ΠΈ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ Π±Ρ ΡΠΊΠ°Π·Π°Π»ΠΎΡΡ Π² Π²Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅. ΠΡΠΈΠ²Π΅Π΄Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ΄ Π΄Π²ΡΡ ΡΠ°Π±Π»ΠΎΠ½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Π³ΠΈΠ΄ΡΠ°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠ» Π±ΡΡΡ Π±ΡΡΡΡΡΠΌ ΠΎΡ Π³ΠΈΠ΄ΡΠ°ΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠ» Π±ΡΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΌ.
ΠΠΎΠ³ΠΈΠΊΠ° ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ: ΡΠ°Π±Π»ΠΎΠ½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΏΠ°ΡΡ, ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΠΏΠ°ΡΡΠ΅ΡΠ°. Π£ΡΠΎΠ²Π΅Π½Ρ LINQ β ΡΡΠΎ ΠΏΠ°ΡΡΠ΅Ρ ΠΈ Π±Π°Π·ΠΎΠ²Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° Π³ΠΈΠ΄ΡΠ°ΡΠΎΡΠ°, Π΄Π΅Π»Π°ΡΡΠ°Ρ Π·Π°ΠΏΡΠΎΡ ΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ Π±Π΄ ΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡΠ°Ρ ΠΊΠ»ΡΡΠΈ Ρ ΠΏΠ°ΡΠ°ΠΌΠΈ ΠΎΡ ΠΏΠ°ΡΡΠ΅ΡΠ° (Π΄Π»Ρ ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π΅ΡΡΡ ΠΊΠΎΠ΄ Π±Π΅Π· LINQ Π΄Π»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ). ΠΠ°Π»Π΅Π΅ ΠΏΠ°ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π³ΠΈΠ΄ΡΠ°ΡΠΈΠΈ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ°Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠ½ΡΠΈΡΠΈ.
Β«ΠΡΡΡΡΡΠΉΒ» (ΠΡΠ΅ΡΠΈΠΊΡ Fast Π² Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ°Ρ ):
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();
}
Π ΡΠ΅Π»ΠΎΠΌ ΠΏΠΎΠ½ΡΡΠ½ΠΎ. ΠΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠΎ Π½ΠΈΠΌ Π΄Π΅Π»Π΅Π³Π°ΡΡ, Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠ΅ ΡΠ΅ΡΡΠ΅ΡΡ, ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ. ΠΠΎΡΠΎΠΌ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° Π½Π°Π΄ΠΎ.
Β«ΠΠ΅Π΄Π»Π΅Π½Π½ΡΠΉΒ» (ΠΡΠ΅ΡΠΈΠΊΡ Slow Π² Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ°Ρ ):
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.
ΠΠ»Ρ Π½Π°Π³Π»ΡΠ΄Π½ΠΎΡΡΠΈ ΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ°Π»ΠΎΠ½Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» Π½Π°ΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΈΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΡ ΠΏΠ°Ρ ΠΊΠΎΡΡΠ΅Π»ΡΡΠΈΠΈ Π½Π°ΠΏΡΡΠΌΡΡ Π² ΠΏΠΎΠ»Ρ ΡΠ½ΡΠΈΡΠΈ. ΠΡΠ΅ΡΠΈΠΊΡ β Manual.
Π’Π΅ΠΏΠ΅ΡΡ Π±Π΅ΡΠ΅ΠΌ BenchmarkDotNet ΠΈ ΠΈΡΡΠ»Π΅Π΄ΡΠ΅ΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. Π Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎβ¦ (ΡΠΏΠΎΠΉΠ»Π΅Ρ β ΡΡΠΎ Π½Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ β Π½ΠΈΠΆΠ΅)
Π§ΡΠΎ ΠΌΡ ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌ? ΠΠ΅ΡΠΎΠ΄Ρ, ΠΏΠΎΠ±Π΅Π΄ΠΎΠ½ΠΎΡΠ½ΠΎ Π½ΠΎΡΡΡΠΈΠ΅ ΠΏΡΠ΅ΡΠΈΠΊΡ Fast, ΠΏΠΎΡΡΠΈ ΠΏΡΠΈ Π²ΡΠ΅Ρ
ΠΏΡΠΎΡ
ΠΎΠ΄Π°Ρ
ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Ρ Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ Slow. ΠΡΠΎ ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ ΠΈ Π΄Π»Ρ Π°Π»Π»ΠΎΠΊΠ°ΡΠΈΠΈ, ΠΈ Π΄Π»Ρ ΡΠΊΠΎΡΠΎΡΡΠΈ ΡΠ°Π±ΠΎΡΡ. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΠΆΠ΅ ΡΡΠΎΡΠΎΠ½Ρ ΠΊΡΠ°ΡΠΈΠ²Π°Ρ ΠΈ ΡΠ»Π΅Π³Π°Π½ΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΡ
Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² LINQ, Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠΆΠΈΡΠ°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. Π Π°Π·Π½ΠΈΡΠ° Π² ΠΏΠΎΡΡΠ΄ΠΊΠΈ. Π’Π΅Π½Π΄Π΅Π½ΡΠΈΡ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Ρ ΡΠ°Π·Π½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΎΠ². Π Π°Π·Π½ΠΈΡΠ° ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΌΠ°ΡΡΡΠ°Π±Π°Ρ
. Π‘ LINQ Π² 4 β 200 ΡΠ°Π· ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, ΠΌΡΡΠΎΡΠ° Π±ΠΎΠ»ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π² ΡΠ°ΠΊΠΈΡ
ΠΆΠ΅ ΠΌΠ°ΡΡΡΠ°Π±Π°Ρ
.
UPDATED
Π― Π½Π΅ ΠΏΠΎΠ²Π΅ΡΠΈΠ» ΡΠ²ΠΎΠΈΠΌ Π³Π»Π°Π·Π°ΠΌ, Π½ΠΎ ΡΡΠΎ Π²Π°ΠΆΠ½Π΅Π΅, Π½ΠΈ ΠΌΠΎΠΈΠΌ Π³Π»Π°Π·Π°ΠΌ, Π½ΠΈ ΠΌΠΎΠ΅ΠΌΡ ΠΊΠΎΠ΄Ρ Π½Π΅ ΠΏΠΎΠ²Π΅ΡΠΈΠ» Π½Π°Ρ ΠΊΠΎΠ»Π»Π΅Π³Π° β
ΠΠΎΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ΅ΡΠ΅ΡΡΠ°:
ΠΡΠ²ΠΎΠ΄: ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π² ΡΠ½ΡΠ΅ΡΠΏΡΠ°ΠΉΠ·Π΅ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ ΠΏΡΠΈΠ±Π΅Π³Π°ΡΡ ΠΊ ΡΡ
ΠΈΡΡΠ΅Π½ΠΈΡΠΌ ΠΎΡΠΎΠ±ΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ β LINQ ΡΠΎΠΆΡΠ΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠΈΠ»ΡΠ½Π΅ΠΉ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π² Π²ΡΡΠΎΠΊΠΎΠ½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ
ΠΌΠ΅ΡΠΎΠ΄Π°Ρ
, ΡΡΠ΅Π±ΡΡΡΠΈΡ
ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡ Π² Π²ΠΈΠ΄Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ² ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² Π΄Π΅Π»Π΅Π³Π°ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΏΠΎΡΠΎΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Β«Π±ΡΡΡΡΡΡΒ» Π»ΠΎΠ³ΠΈΠΊΡ. Π’Π°ΠΊ ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ ΠΈ Π³ΠΈΠ±ΠΊΠΎΡΡΡ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ, ΠΈ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠΎΠ΄ Ρ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΡΡ. ΠΡΠ΅ ΠΆΠ΅Π»Π°ΡΡΠΈΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠ΅ΡΠ΅ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΌΠΎΠΈ ΡΠ»ΠΎΠ²Π°:
PS: ΠΊΠΎΠ΄ Π² ΡΠ΅ΡΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ IoC, Π° Π² Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ°Ρ β ΡΠ²Π½ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Ρ ΠΎΡΡΠ΅ΠΊ Π²ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Π½ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΡΡΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ Π·Π°ΡΡΠΌΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°ΠΊΡΠΎΡΡ.
PPS: Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
PPPS: ΡΠΏΠ°ΡΠΈΠ±ΠΎ ΡΠΎΠΌΡ Π΄ΠΎΡΠΎΡΠ½ΠΎΠΌΡ ΡΠΈΡΠ°ΡΠ΅Π»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠΊΠΎΠΏΠ°Π»ΡΡ ΠΊ ΡΡΠΈΠ»ΠΈΡΡΠΈΠΊΠ΅ ΠΈ ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΡ. Π― Π·Π° Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠ΅ ΠΈ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ. ΠΠΈΠΏΠ»ΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄Π°ΡΠΈ ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΆΠ΅Π»Π°ΡΡ Π»ΡΡΡΠ΅Π³ΠΎ, Π½ΠΎ ΠΊΡΠΈΡΠΈΠΊΡ Ρ ΡΡΠ΅Π». ΠΡΠΎΡΡ ΠΊ ΡΠ½Π°ΡΡΠ΄Ρ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com