Π£ ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡΡΡ ΠΆΠ΅Π»ΠΈΠΌΠΎ Π΄Π° ΠΏΠΎΠ΄Π΅Π»ΠΈΠΌΠΎ Π·Π°Π½ΠΈΠΌΡΠΈΠ² Π½Π°ΡΠΈΠ½ Π±Π°Π²ΡΠ΅ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΎΠΌ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ΠΎΠ³ ΡΠΈΡΡΠ΅ΠΌΠ°.
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ΅Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Ρ Π‘ΡΠ°Π»Π° ΡΠ΅Π·ΠΈΠΊΡ Π½Π° Π±Π΅Π·Π±Π΅Π΄Π°Π½ Π½Π°ΡΠΈΠ½. ΠΠ΅ΡΠ°ΡΠ½ΠΎ ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅. Π Π°Π·ΠΌΠ°ΡΡΠ°ΡΡ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΡΠΈ Π°ΡΠΏΠ΅ΠΊΡΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠ³Π°, ΡΠΊΡΡΡΡΡΡΡΠΈ ΡΡΠΈΡΠ°Ρ Π½Π° ΡΠΊΡΠΏΠ°Π½ ΠΏΡΠΎΡΠ΅Ρ ΡΠ°Π·Π²ΠΎΡΠ°.

()
Π£Π²ΠΎΠ΄
ΠΠ·Π³ΡΠ°Π΄ΡΠ° ΡΠΎΠ±ΡΡΠ½ΠΈΡ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π°Ρ ΡΠ΅Π²Π° ΡΠΏΠΎΡΡΠ΅Π±Ρ ΠΈΡΠΏΡΠ°Π²Π½Π΅ ΠΈ ΠΊΠΎΡ Π΅ΡΠ΅Π½ΡΠ½Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ Π½Π° ΡΠ²ΠΈΠΌ ΡΠ²ΠΎΡΠΎΠ²ΠΈΠΌΠ°. Π’ΠΈΠΏΠΈΡΠ½ΠΎ ΡΠ΅ΡΠ΅ΡΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ ΡΠ΅ΠΊΡΡΡΠ°Π»Π½ΠΎΠ³ ΠΎΠΏΠΈΡΠ° ΠΏΡΠΈΠΌΠ΅Π½Π΅ (ΡΠ΅ΡΡΠ°ΡΠΎΡΠΌ, Π°Π½ΡΠΈΠ±Π»Π΅ ΠΈΠ»ΠΈ Π½Π΅ΡΡΠΎ ΡΠ»ΠΈΡΠ½ΠΎ) ΠΈ Π°ΡΡΠΎΠΌΠ°ΡΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½ΠΈΡ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° (ΡΠ΅ΡΡΠΎ β Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π·Π° ΡΠ²Π°ΠΊΠΈ ΡΠ²ΠΎΡ/ΡΠ»ΠΎΠ³Ρ). Π’Π°ΠΊΠΎΡΠ΅ Π±ΠΈΡΠΌΠΎ ΠΆΠ΅Π»Π΅Π»ΠΈ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ ΠΈΡΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π΅ ΠΈΡΡΠΈΡ Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° ΡΠ²Π°ΠΊΠΎΠΌ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½ΠΎΠΌ ΡΠ²ΠΎΡΡ (Ρ ΡΡΠΏΡΠΎΡΠ½ΠΎΠΌ Π±ΠΈΡΠΌΠΎ ΠΈΠΌΠ°Π»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ ΡΠ° Π½Π΅ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡΡ). Π£ ΠΠΠ ΡΠ²Π΅ΡΡ ΡΠΎ Π·Π½Π°ΡΠΈ Π΄Π° Π±ΠΈ Π±Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π° ΡΠ°Π·ΠΌΠ΅Π½Ρ ΠΏΠΎΡΡΠΊΠ° ΡΡΠ΅Π±Π°Π»ΠΎ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΡΡΠ΅ Π²Π΅ΡΠ·ΠΈΡΠ΅ Π½Π° ΡΠ²ΠΈΠΌ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½ΠΈΠΌ ΡΠ²ΠΎΡΠΎΠ²ΠΈΠΌΠ°.
Π¨ΡΠ° ΡΠ΅ ΡΠ° ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ΠΌ ΡΠΈΡΡΠ΅ΠΌΠ°? ΠΠ°ΡΠ°Π²Π½ΠΎ, ΡΡΠ΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° ΠΈΠΌΠ°ΠΌΠΎ ΡΠ΅Π΄ΠΈΠ½ΠΈΡΠ½Π΅ ΡΠ΅ΡΡΠΎΠ²Π΅ Π·Π° ΡΠ²Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅ ΠΏΡΠ΅ Π½Π΅Π³ΠΎ ΡΡΠΎ ΠΏΡΠ΅ΡΠ΅ΠΌΠΎ Π½Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΡΠΊΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅. ΠΠ° Π±ΠΈΡΠΌΠΎ ΠΌΠΎΠ³Π»ΠΈ Π΄Π° Π΅ΠΊΡΡΡΠ°ΠΏΠΎΠ»ΠΈΡΠ°ΠΌΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ° Π½Π° Π²ΡΠ΅ΠΌΠ΅ ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ°, ΡΡΠ΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° ΡΠ΅ ΡΠ²Π΅ΡΠΈΠΌΠΎ Π΄Π° ΡΡ Π²Π΅ΡΠ·ΠΈΡΠ΅ ΡΠ²ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Π΅ ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½Ρ ΠΈΠ·Π²ΠΎΡΠ΅ΡΠ° ΠΈΡ ΠΎΠΊΡΡΠΆΠ΅ΡΡ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ°.
ΠΠ°Π΄Π° ΠΏΠΎΠΊΡΠ΅ΡΠ΅ΡΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΡΠΊΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅, ΡΠ΅ΡΡΠΎ ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π°ΠΊΡΠ΅ ΠΈΠΌΠ°ΡΠΈ ΠΈΡΡΡ ΠΏΡΡΠ°ΡΡ ΠΊΠ»Π°ΡΠ΅ Π½Π° ΡΠ²ΠΈΠΌ ΡΠ²ΠΎΡΠΎΠ²ΠΈΠΌΠ°. Π‘Π°ΠΌΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΡΠ²Π΅ΡΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΈΡΡΠ° ΠΏΡΡΠ°ΡΠ° ΠΊΠ»Π°ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΏΡΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠ°ΡΡ. (ΠΠΎΠ³ΡΡΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ ΠΏΡΡΠ°ΡΠ΅ ΠΊΠ»Π°ΡΠ° Π½Π° ΡΠ°Π·Π»ΠΈΡΠΈΡΠΈΠΌ ΡΠ²ΠΎΡΠΎΠ²ΠΈΠΌΠ°, Π°Π»ΠΈ ΡΠ΅ ΡΠ΅ΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΠΈ ΠΎΠ²Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠΈ.) ΠΠ°ΠΊΠ»Π΅, Π΄Π° Π±ΠΈ ΡΡΠ²Π°ΡΠΈ Π±ΠΈΠ»Π΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π΅, ΡΠ°Π·ΠΌΠΎΡΡΠΈΡΠ΅ΠΌΠΎ ΡΠ°ΠΌΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Π΅ ΠΏΡΡΠ°ΡΠ΅ ΠΊΠ»Π°ΡΠ° Π½Π° ΡΠ²ΠΈΠΌ ΡΠ²ΠΎΡΠΎΠ²ΠΈΠΌΠ°.
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΠΈΠΌΠ° ΡΠ΅Π½Π΄Π΅Π½ΡΠΈΡΡ Π΄Π° ΡΠ΅ ΡΠ°Π·Π²ΠΈΡΠ° Π·Π°ΡΠ΅Π΄Π½ΠΎ ΡΠ° ΡΠΎΡΡΠ²Π΅ΡΠΎΠΌ. ΠΠ±ΠΈΡΠ½ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ Π²Π΅ΡΠ·ΠΈΡΠ΅ Π΄Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΡΡΠ΅ΠΌΠΎ ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅
ΡΠ°Π·Π΅ Π΅Π²ΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠΎΡΡΠ²Π΅ΡΠ°. Π§ΠΈΠ½ΠΈ ΡΠ΅ ΡΠ°Π·ΡΠΌΠ½ΠΈΠΌ ΠΏΠΎΠΊΡΠΈΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²ΡΠ°ΡΠ΅ΠΌ Π²Π΅ΡΠ·ΠΈΡΠ°ΠΌΠ° ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠΎΠ²Π°ΡΠΈ ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΡΠ° Π½Π΅ΠΊΠΈΠΌ ΠΎΠ·Π½Π°ΠΊΠ°ΠΌΠ°. ΠΠΊΠΎ ΠΏΠΎΡΡΠΎΡΠΈ ΡΠ°ΠΌΠΎ ΡΠ΅Π΄Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΠΈ, ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΡΠ΅Π΄Π½Ρ Π²Π΅ΡΠ·ΠΈΡΡ ΠΊΠ°ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ. ΠΠΎΠ½Π΅ΠΊΠ°Π΄ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΈΠΌΠ°ΡΠΈ Π²ΠΈΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΈΡ
ΠΎΠΊΡΡΠΆΠ΅ΡΠ°. Π Π·Π° ΡΠ²Π°ΠΊΠΎ ΠΎΠΊΡΡΠΆΠ΅ΡΠ΅ ΡΠ΅ Π½Π°ΠΌ ΠΌΠΎΠΆΠ΄Π° ΡΡΠ΅Π±Π°ΡΠΈ ΠΏΠΎΡΠ΅Π±Π½Π° Π³ΡΠ°Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅. ΠΠ°ΠΊΠ»Π΅, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΠΌΠΎΠ³Ρ Π±ΠΈΡΠΈ ΠΎΠ·Π½Π°ΡΠ΅Π½Π΅ Π³ΡΠ°Π½ΠΎΠΌ ΠΈ Π²Π΅ΡΠ·ΠΈΡΠΎΠΌ Π΄Π° Π±ΠΈ ΡΠ΅ Π½Π° ΡΠ΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ Π½Π°ΡΠΈΠ½ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠΎΠ²Π°Π»Π΅ ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅. Π‘Π²Π°ΠΊΠ° ΠΎΠ·Π½Π°ΠΊΠ° Π³ΡΠ°Π½Π΅ ΠΈ Π²Π΅ΡΠ·ΠΈΡΠ° ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°ΡΡ ΡΠ΅Π΄Π½ΠΎΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ΠΈΡ
ΡΠ²ΠΎΡΠΎΠ²Π°, ΠΏΠΎΡΡΠΎΠ²Π°, Π΅ΠΊΡΡΠ΅ΡΠ½ΠΈΡ
ΡΠ΅ΡΡΡΡΠ°, Π²Π΅ΡΠ·ΠΈΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΏΡΡΠ°ΡΠ° ΠΊΠ»Π°ΡΠ° Π½Π° ΡΠ²Π°ΠΊΠΎΠΌ ΡΠ²ΠΎΡΡ. ΠΠ²Π΄Π΅ ΡΠ΅ΠΌΠΎ ΠΏΠΎΠΊΡΠΈΡΠΈ ΡΠ°ΠΌΠΎ ΡΠ΅Π΄Π½Ρ Π³ΡΠ°Π½Ρ ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠΎΠ²Π°ΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΠΏΠΎΠΌΠΎΡΡ ΡΡΠΎΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ½Π΅ Π΄Π΅ΡΠΈΠΌΠ°Π»Π½Π΅ Π²Π΅ΡΠ·ΠΈΡΠ΅ (1.2.3), Π½Π° ΠΈΡΡΠΈ Π½Π°ΡΠΈΠ½ ΠΊΠ°ΠΎ ΠΈ ΠΎΡΡΠ°Π»ΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ.
Π£ ΡΠ°Π²ΡΠ΅ΠΌΠ΅Π½ΠΈΠΌ ΠΎΠΊΡΡΠΆΠ΅ΡΠΈΠΌΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½ΠΈ ΡΠ°ΡΠ»ΠΎΠ²ΠΈ ΡΠ΅ Π²ΠΈΡΠ΅ Π½Π΅ ΠΌΠ΅ΡΠ°ΡΡ ΡΡΡΠ½ΠΎ. ΠΠ±ΠΈΡΠ½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ΅ΠΌΠΎ
ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ Ρ Π²ΡΠ΅ΠΌΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅ ΠΈ ΠΏΠΎΡΠ»Π΅. ΠΠ°ΠΊΠ»Π΅, Π½Π΅ΠΊΠΎ Π±ΠΈ ΡΠ΅ ΠΌΠΎΠ³Π°ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΠΈ Π·Π°ΡΡΠΎ ΡΠΎΡ ΡΠ²Π΅ΠΊ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ ΡΠ΅ΠΊΡΡΡΠ°Π»Π½ΠΈ ΡΠΎΡΠΌΠ°Ρ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅? ΠΠ·Π²ΠΎΠ΄ΡΠΈΠ²Π° ΠΎΠΏΡΠΈΡΠ° ΡΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΠΏΠΎΡΡΠ°Π²ΠΈ Ρ ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡ ΠΈ Π΄Π° ΡΠ΅ ΠΈΡΠΊΠΎΡΠΈΡΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ Ρ Π²ΡΠ΅ΠΌΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°ΡΠ°.
Π£ ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡΡΡ ΡΠ΅ΠΌΠΎ ΠΈΡΠΏΠΈΡΠ°ΡΠΈ ΠΈΠ΄Π΅ΡΡ ΡΡΠ²Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ Ρ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°Π½ΠΎΠΌ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ.
ΠΠΎΠΌΠΏΠ°Π±ΠΈΠ»Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°
Π£ ΠΎΠ²ΠΎΠΌ ΠΎΠ΄Π΅ΡΠΊΡ ΡΠ΅ΠΌΠΎ ΡΠ°Π·ΠΌΠΎΡΡΠΈΡΠΈ ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠ°ΡΠΈΡΠΊΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅. ΠΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡ ΡΠ΅ ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°ΡΡ Π΄Π²Π΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π΅ ΡΡΠ»ΡΠ³Π΅ - Π΅Ρ ΠΎ ΡΠ΅ΡΠ²ΠΈΡ ΠΈ ΠΊΠ»ΠΈΡΠ΅Π½Ρ Π΅Ρ ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ°. ΠΠ°ΡΠΈΠΌ ΡΠ΅ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΠ°ΡΡ Π΄Π²Π° ΡΠ°Π·Π»ΠΈΡΠΈΡΠ° Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ° ΠΎΠ±Π΅ ΡΡΠ»ΡΠ³Π΅. ΠΠ΅Π΄Π°Π½ ΡΠ΅ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ ΡΠ΅Π΄Π½ΠΎΠ³ ΡΠ²ΠΎΡΠ°, Π° Π΄ΡΡΠ³ΠΈ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ Π΄Π²Π° ΡΠ²ΠΎΡΠ°.
Π’ΠΈΠΏΠΈΡΠ°Π½ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌ ΡΠ΅ ΡΠ°ΡΡΠΎΡΠΈ ΠΎΠ΄ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΡΠ²ΠΎΡΠΎΠ²Π°. Π§Π²ΠΎΡΠΎΠ²ΠΈ ΡΠ΅ ΠΌΠΎΠ³Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠΎΠ²Π°ΡΠΈ ΠΏΠΎΠΌΠΎΡΡ Π½Π΅ΠΊΠΎΠ³ ΡΠΈΠΏΠ°:
sealed trait NodeId
case object Backend extends NodeId
case object Frontend extends NodeIdΠΈΠ»ΠΈ ΡΠ°ΠΌΠΎ
case class NodeId(hostName: String)ΠΈΠ»ΠΈ ΡΠ°ΠΊ
object Singleton
type NodeId = Singleton.typeΠΠ²ΠΈ ΡΠ²ΠΎΡΠΎΠ²ΠΈ ΠΎΠ±Π°Π²ΡΠ°ΡΡ ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ ΡΠ»ΠΎΠ³Π΅, ΠΏΠΎΠΊΡΠ΅ΡΡ Π½Π΅ΠΊΠ΅ ΡΡΠ»ΡΠ³Π΅ ΠΈ ΡΡΠ΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° Π±ΡΠ΄Ρ Ρ ΠΌΠΎΠ³ΡΡΠ½ΠΎΡΡΠΈ Π΄Π° ΠΊΠΎΠΌΡΠ½ΠΈΡΠΈΡΠ°ΡΡ ΡΠ° Π΄ΡΡΠ³ΠΈΠΌ ΡΠ²ΠΎΡΠΎΠ²ΠΈΠΌΠ° ΠΏΠΎΠΌΠΎΡΡ Π’Π¦Π/Π₯Π’Π’Π Π²Π΅Π·Π°.
ΠΠ° Π’Π¦Π Π²Π΅Π·Ρ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π°Π½ Π±Π°Ρ Π±ΡΠΎΡ ΠΏΠΎΡΡΠ°. Π’Π°ΠΊΠΎΡΠ΅ ΠΆΠ΅Π»ΠΈΠΌΠΎ Π΄Π° Π±ΡΠ΄Π΅ΠΌΠΎ ΡΠΈΠ³ΡΡΠ½ΠΈ Π΄Π° ΠΊΠ»ΠΈΡΠ΅Π½Ρ ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΡΠ°Π·Π³ΠΎΠ²Π°ΡΠ°ΡΡ ΠΈΡΡΠΈΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠΌ. ΠΠ° Π±ΠΈΡΠΌΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ°Π»ΠΈ Π²Π΅Π·Ρ ΠΈΠ·ΠΌΠ΅ΡΡ ΡΠ²ΠΎΡΠΎΠ²Π°, Ρ Π°ΡΠ΄Π΅ Π΄Π° Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ΅ΠΌΠΎ ΡΠ»Π΅Π΄Π΅ΡΡ ΠΊΠ»Π°ΡΡ:
case class TcpEndPoint[Protocol](node: NodeId, port: Port[Protocol])Π³Π΄Π΅ Port ΡΠ΅ ΡΠ°ΠΌΠΎ ΡΠ΅Π΄Π°Π½ Int Ρ Π΄ΠΎΠ·Π²ΠΎΡΠ΅Π½ΠΎΠΌ ΠΎΠΏΡΠ΅Π³Ρ:
type PortNumber = Refined[Int, Closed[_0, W.`65535`.T]]Π Π°ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΡΠΈΠΏΠΎΠ²ΠΈ
Π²ΠΈΠ΄Π΅ΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°. Π£ΠΊΡΠ°ΡΠΊΠΎ, ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° Π΄ΠΎΠ΄Π°Π²Π°ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠΈΡ
ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅ΡΠ° Π·Π° ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°ΡΠ΅ Π΄ΡΡΠ³ΠΈΠΌ ΡΠΈΠΏΠΎΠ²ΠΈΠΌΠ°. Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°ΡΡ Int Π΄ΠΎΠ·Π²ΠΎΡΠ΅Π½ΠΎ ΡΠ΅ ΡΠ°ΠΌΠΎ Π΄Π° ΠΈΠΌΠ° 16-Π±ΠΈΡΠ½Π΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΠΊΠΎΡΠ΅ ΠΌΠΎΠ³Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ°ΡΠΈ Π±ΡΠΎΡ ΠΏΠΎΡΡΠ°. ΠΠ΅ ΠΏΠΎΡΡΠΎΡΠΈ Π·Π°Ρ
ΡΠ΅Π² Π·Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ ΠΎΠ²Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Π·Π° ΠΎΠ²Π°Ρ ΠΏΡΠΈΡΡΡΠΏ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΈ. Π‘Π°ΠΌΠΎ ΠΈΠ·Π³Π»Π΅Π΄Π° Π΄Π° ΡΠ΅ Π΄ΠΎΠ±ΡΠΎ ΡΠΊΠ»Π°ΠΏΠ°.
ΠΠ° Π₯Π’Π’Π (Π ΠΠ‘Π’) ΠΌΠΎΠΆΠ΄Π° ΡΠ΅ Π½Π°ΠΌ ΡΡΠ΅Π±Π°ΡΠΈ ΠΈ ΠΏΡΡΠ°ΡΠ° ΡΡΠ»ΡΠ³Π΅:
type UrlPathPrefix = Refined[String, MatchesRegex[W.`"[a-zA-Z_0-9/]*"`.T]]
case class PortWithPrefix[Protocol](portNumber: PortNumber, pathPrefix: UrlPathPrefix)Π€Π°Π½ΡΠΎΠΌΡΠΊΠΈ ΡΠΈΠΏ
ΠΠ° Π±ΠΈΡΠΌΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠΎΠ²Π°Π»ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΡΠΎΠΊΠΎΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΠ΅, ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ Π‘ΡΠ°Π»Π° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΡ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ°ΡΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΠΈΠΏΠ° Protocol ΠΊΠΎΡΠΈ ΡΠ΅ Π½Π΅ ΠΊΠΎΡΠΈΡΡΠΈ Ρ ΡΠ°Π·ΡΠ΅Π΄Ρ. Π’ΠΎ ΡΠ΅ ΡΠ·Π² ΡΠ°Π½ΡΠΎΠΌΡΠΊΠΈ ΡΠΈΠΏ. Π£ ΡΠΎΠΊΡ ΡΠ°Π΄Π° ΡΠ΅ΡΠΊΠΎ Π½Π°ΠΌ ΡΡΠ΅Π±Π° ΠΈΠ½ΡΡΠ°Π½ΡΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°, Π·Π°ΡΠΎ ΡΠ΅ Π½Π΅ ΡΡΠ²Π°ΠΌΠΎ. Π’ΠΎΠΊΠΎΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΠ΅ ΠΎΠ²Π°Ρ ΡΠ°Π½ΡΠΎΠΌΡΠΊΠΈ ΡΠΈΠΏ Π΄Π°ΡΠ΅ Π΄ΠΎΠ΄Π°ΡΠ½Ρ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ ΡΠΈΠΏΠ°. ΠΠ΅ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΏΡΠΎΡΠΈ ΠΏΠΎΡΡ ΡΠ° Π½Π΅ΡΠ°ΡΠ½ΠΈΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠΌ.
ΠΠ΅Π΄Π°Π½ ΠΎΠ΄ Π½Π°ΡΡΠ΅ΡΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° ΡΠ΅ Π ΠΠ‘Π’ ΠΠΠ ΡΠ° ΠΡΠΎΠ½ ΡΠ΅ΡΠΈΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΠΎΠΌ:
sealed trait JsonHttpRestProtocol[RequestMessage, ResponseMessage]Π³Π΄Π΅ RequestMessage ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΡΠΈΠΏ ΠΏΠΎΡΡΠΊΠ° ΠΊΠΎΡΠ΅ ΠΊΠ»ΠΈΡΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅ ΠΏΠΎΡΠ»Π°ΡΠΈ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈ ResponseMessage ΡΠ΅ ΠΏΠΎΡΡΠΊΠ° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ° ΡΠ° ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΠ°ΡΠ°Π²Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΊΡΠ΅ΠΈΡΠ°ΡΠΈ Π΄ΡΡΠ³Π΅ ΠΎΠΏΠΈΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° ΠΊΠΎΡΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠΈΡΠ°ΡΡ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΡΠ° ΠΆΠ΅ΡΠ΅Π½ΠΎΠΌ ΠΏΡΠ΅ΡΠΈΠ·Π½ΠΎΡΡΡ.
ΠΠ° ΠΏΠΎΡΡΠ΅Π±Π΅ ΠΎΠ²ΠΎΠ³ ΠΏΠΎΡΡΠ° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ΠΌΠΎ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΈΡΡ Π²Π΅ΡΠ·ΠΈΡΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°:
sealed trait SimpleHttpGetRest[RequestMessage, ResponseMessage]Π£ ΠΎΠ²ΠΎΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ ΠΏΠΎΡΡΠΊΠ° ΡΠ° Π·Π°Ρ ΡΠ΅Π²ΠΎΠΌ ΡΠ΅ Π΄ΠΎΠ΄Π°ΡΠ΅ Π£Π Π-Ρ, Π° ΠΏΠΎΡΡΠΊΠ° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ° ΡΠ΅ Π²ΡΠ°ΡΠ° ΠΊΠ°ΠΎ ΠΎΠ±ΠΈΡΠ°Π½ ΡΡΡΠΈΠ½Π³.
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΡΡΠ»ΡΠ³Π΅ ΡΠ΅ ΠΌΠΎΠΆΠ΅ ΠΎΠΏΠΈΡΠ°ΡΠΈ ΠΈΠΌΠ΅Π½ΠΎΠΌ ΡΡΠ»ΡΠ³Π΅, ΠΊΠΎΠ»Π΅ΠΊΡΠΈΡΠΎΠΌ ΠΏΠΎΡΡΠΎΠ²Π° ΠΈ Π½Π΅ΠΊΠΈΠΌ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈΠΌΠ°. ΠΠΎΡΡΠΎΡΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΌΠΎΠ³ΡΡΠΈΡ
Π½Π°ΡΠΈΠ½Π° ΠΊΠ°ΠΊΠΎ ΡΠ²Π΅ ΠΎΠ²Π΅ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΠΈ Ρ Π‘ΡΠ°Π»ΠΈ (Π½ΠΏΡ. HList, Π°Π»Π³Π΅Π±Π°ΡΡΠΊΠΈ ΡΠΈΠΏΠΎΠ²ΠΈ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°). ΠΠ° ΠΏΠΎΡΡΠ΅Π±Π΅ ΠΎΠ²ΠΎΠ³ ΠΏΠΎΡΡΠ° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ΠΌΠΎ ΡΠ·ΠΎΡΠΊΠ΅ ΠΊΠΎΠ»Π°ΡΠ° ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ°ΡΠΈ ΠΊΠΎΠΌΠ°Π΄Π΅ (ΠΌΠΎΠ΄ΡΠ»Π΅) ΠΊΠΎΡΠΈ ΡΠ΅ ΠΌΠΎΠ³Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΎΠ²Π°ΡΠΈ ΠΊΠ°ΠΎ ΠΎΡΠΎΠ±ΠΈΠ½Π΅. (Π£Π·ΠΎΡΠ°ΠΊ ΠΊΠΎΠ»Π°ΡΠ° Π½ΠΈΡΠ΅ ΡΡΠ»ΠΎΠ² Π·Π° ΠΎΠ²Π°Ρ ΠΏΡΠΈΡΡΡΠΏ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΠΊΠΎΡΠΈ ΡΠ΅ ΠΌΠΎΠΆΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°ΡΠΈ. Π’ΠΎ ΡΠ΅ ΡΠ°ΠΌΠΎ ΡΠ΅Π΄Π½Π° ΠΌΠΎΠ³ΡΡΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° ΠΈΠ΄Π΅ΡΠ΅.)
ΠΠ°Π²ΠΈΡΠ½ΠΎΡΡΠΈ ΡΠ΅ ΠΌΠΎΠ³Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΠΌ ΡΠ·ΠΎΡΠΊΠ° ΠΊΠΎΠ»Π°ΡΠ° ΠΊΠ°ΠΎ ΠΊΡΠ°ΡΡΠΈΡ ΡΠ°ΡΠ°ΠΊΠ° Π΄ΡΡΠ³ΠΈΡ ΡΠ²ΠΎΡΠΎΠ²Π°:
type EchoProtocol[A] = SimpleHttpGetRest[A, A]
trait EchoConfig[A] extends ServiceConfig {
def portNumber: PortNumber = 8081
def echoPort: PortWithPrefix[EchoProtocol[A]] = PortWithPrefix[EchoProtocol[A]](portNumber, "echo")
def echoService: HttpSimpleGetEndPoint[NodeId, EchoProtocol[A]] = providedSimpleService(echoPort)
}ΠΡΡ
ΠΎ ΡΠ΅ΡΠ²ΠΈΡΡ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π°Π½ ΡΠ°ΠΌΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ ΠΏΠΎΡΡ. Π ΠΈΠ·ΡΠ°Π²ΡΡΡΠ΅ΠΌΠΎ Π΄Π° ΠΎΠ²Π°Ρ ΠΏΠΎΡΡ ΠΏΠΎΠ΄ΡΠΆΠ°Π²Π° Π΅Ρ
ΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ». ΠΠΌΠ°ΡΡΠ΅ Π½Π° ΡΠΌΡ Π΄Π° Ρ ΠΎΠ²ΠΎΠΌ ΡΡΠ΅Π½ΡΡΠΊΡ Π½Π΅ ΠΌΠΎΡΠ°ΠΌΠΎ Π΄Π° Π½Π°Π²ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ΄ΡΠ΅ΡΠ΅Π½ΠΈ ΠΏΠΎΡΡ, ΡΠ΅Ρ ΠΎΡΠΎΠ±ΠΈΠ½Π° Π΄ΠΎΠ·Π²ΠΎΡΠ°Π²Π° Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡΠ΅ Π°ΠΏΡΡΡΠ°ΠΊΡΠ½ΠΈΡ
ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΠΊΠΎ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ Π°ΠΏΡΡΡΠ°ΠΊΡΠ½Π΅ ΠΌΠ΅ΡΠΎΠ΄Π΅, ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅Ρ ΡΠ΅ Π·Π°Ρ
ΡΠ΅Π²Π°ΡΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ Ρ ΠΈΠ½ΡΡΠ°Π½ΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅. ΠΠ²Π΄Π΅ ΡΠΌΠΎ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΠ»ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ (8081) ΠΈ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΡΠ΅ ΠΊΠ°ΠΎ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡ Π°ΠΊΠΎ ΡΠ΅ ΠΏΡΠ΅ΡΠΊΠΎΡΠΈΠΌΠΎ Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΈ.
ΠΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° ΠΏΡΠΎΠ³Π»Π°ΡΠΈΠΌΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΈ ΠΊΠ»ΠΈΡΠ΅Π½ΡΠ° ΡΡΠ»ΡΠ³Π΅ Π΅Ρ ΠΎ:
trait EchoClientConfig[A] {
def testMessage: String = "test"
def pollInterval: FiniteDuration
def echoServiceDependency: HttpSimpleGetEndPoint[_, EchoProtocol[A]]
}ΠΠ°Π²ΠΈΡΠ½ΠΎΡΡ ΠΈΠΌΠ° ΠΈΡΡΠΈ ΡΠΈΠΏ ΠΊΠ°ΠΎ ΠΈ echoService. ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ, Π·Π°Ρ
ΡΠ΅Π²Π° ΠΈΡΡΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ». ΠΠ°ΠΊΠ»Π΅, ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π±ΠΈΡΠΈ ΡΠΈΠ³ΡΡΠ½ΠΈ Π΄Π° ΡΠ΅, Π°ΠΊΠΎ ΠΏΠΎΠ²Π΅ΠΆΠ΅ΠΌΠΎ ΠΎΠ²Π΅ Π΄Π²Π΅ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ, ΡΠ°Π΄ΠΈΡΠΈ ΠΈΡΠΏΡΠ°Π²Π½ΠΎ.
ΠΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° ΡΡΠ»ΡΠ³Π°
Π‘Π΅ΡΠ²ΠΈΡΡ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½Π° ΡΡΠ½ΠΊΡΠΈΡΠ° Π·Π° ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅ ΠΈ Π³ΡΠ°ΡΠΈΠΎΠ·Π½ΠΎ Π³Π°ΡΠ΅ΡΠ΅. (ΠΠΎΠ³ΡΡΠ½ΠΎΡΡ Π³Π°ΡΠ΅ΡΠ° ΡΠ΅ΡΠ²ΠΈΡΠ° ΡΠ΅ ΠΊΡΠΈΡΠΈΡΠ½Π° Π·Π° ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅.) ΠΠΏΠ΅Ρ ΠΏΠΎΡΡΠΎΡΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΎΠΏΡΠΈΡΠ° Π·Π° ΠΎΠ΄ΡΠ΅ΡΠΈΠ²Π°ΡΠ΅ ΡΠ°ΠΊΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΡΠ΅ Π·Π° Π΄Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠ³Π»ΠΈ Π±ΠΈΡΠΌΠΎ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ ΠΊΠ»Π°ΡΠ΅ ΡΠΈΠΏΠ°). ΠΠ° ΠΎΠ²Π°Ρ ΠΏΠΎΡΡ ΡΠ΅ΠΌΠΎ ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ Π¦Π°ΠΊΠ΅ ΠΠ°ΡΡΠ΅ΡΠ½. ΠΠΎΠΆΠ΅ΠΌΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ°ΡΠΈ ΡΡΠ»ΡΠ³Ρ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ cats.Resource ΠΊΠΎΡΠΈ Π²Π΅Ρ ΠΎΠ±Π΅Π·Π±Π΅ΡΡΡΠ΅ Π·Π°Π³ΡΠ°Π΄Π΅ ΠΈ ΠΎΡΠ»ΠΎΠ±Π°ΡΠ°ΡΠ΅ ΡΠ΅ΡΡΡΡΠ°. ΠΠ° Π±ΠΈΡΠΌΠΎ Π½Π°Π±Π°Π²ΠΈΠ»ΠΈ ΡΠ΅ΡΡΡΡ, ΡΡΠ΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΠΌΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ ΠΈ Π½Π΅ΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π° ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ°. ΠΠ°ΠΊΠ»Π΅, ΡΡΠ½ΠΊΡΠΈΡΠ° ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ° ΡΡΠ»ΡΠ³Π΅ ΠΌΠΎΠΆΠ΅ ΠΈΠ·Π³Π»Π΅Π΄Π°ΡΠΈ ΠΎΠ²Π°ΠΊΠΎ:
type ResourceReader[F[_], Config, A] = Reader[Config, Resource[F, A]]
trait ServiceImpl[F[_]] {
type Config
def resource(
implicit
resolver: AddressResolver[F],
timer: Timer[F],
contextShift: ContextShift[F],
ec: ExecutionContext,
applicative: Applicative[F]
): ResourceReader[F, Config, Unit]
}Π³Π΄Π΅
Configβ ΡΠΈΠΏ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΠΊΠΎΡΡ Π·Π°Ρ ΡΠ΅Π²Π° ΠΎΠ²Π°Ρ ΡΡΠ°ΡΡΠ΅Ρ ΡΠ΅ΡΠ²ΠΈΡΠ°AddressResolverβ ΡΡΠ½ΡΠΈΠΌΠ΅ ΠΎΠ±ΡΠ΅ΠΊΠ°Ρ ΠΊΠΎΡΠΈ ΠΈΠΌΠ° ΠΌΠΎΠ³ΡΡΠ½ΠΎΡΡ Π΄Π° Π΄ΠΎΠ±ΠΈΡΠ΅ ΡΡΠ²Π°ΡΠ½Π΅ Π°Π΄ΡΠ΅ΡΠ΅ Π΄ΡΡΠ³ΠΈΡ ΡΠ²ΠΎΡΠΎΠ²Π° (Π½Π°ΡΡΠ°Π²ΠΈΡΠ΅ Π΄Π° ΡΠΈΡΠ°ΡΠ΅ Π·Π° Π΄Π΅ΡΠ°ΡΠ΅).
ΠΎΡΡΠ°Π»ΠΈ ΡΠΈΠΏΠΎΠ²ΠΈ ΠΏΠΎΡΠΈΡΡ ΠΈΠ· cats:
F[_]β ΡΠΈΠΏ Π΅ΡΠ΅ΠΊΡΠ° (Π£ Π½Π°ΡΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΈΡΠ΅ΠΌ ΡΠ»ΡΡΠ°ΡΡF[A]ΠΌΠΎΠ³Π°ΠΎ Π±ΠΈΡΠΈ ΠΏΡΠ°Π²Π΅Π΄Π°Π½() => A. Π£ ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡΡΡ ΡΠ΅ΠΌΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈcats.IO.)Reader[A,B]β ΡΠ΅ ΠΌΠ°ΡΠ΅-Π²ΠΈΡΠ΅ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌ Π·Π° ΡΡΠ½ΠΊΡΠΈΡΡA => Bcats.Resourceβ ΠΈΠΌΠ° Π½Π°ΡΠΈΠ½Π° Π·Π° ΡΡΠΈΡΠ°ΡΠ΅ ΠΈ ΠΎΡΠ»ΠΎΠ±Π°ΡΠ°ΡΠ΅Timerβ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° ΡΠΏΠ°Π²Π°ΡΠ΅/ΠΌΠ΅ΡΠ΅ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π°ContextShift- Π°Π½Π°Π»ΠΎΠ³ ΠΎΠ΄ExecutionContextApplicativeβ ΠΎΠΌΠΎΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡΠ° Π½Π° ΡΠ½Π°Π·ΠΈ (ΡΠΊΠΎΡΠΎ ΠΌΠΎΠ½Π°Π΄Π°) (ΠΌΠΎΠ³Π»ΠΈ Π±ΠΈΡΠΌΠΎ Π³Π° Π΅Π²Π΅Π½ΡΡΠ°Π»Π½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΠΈ Π½Π΅ΡΠΈΠΌ Π΄ΡΡΠ³ΠΈΠΌ)
ΠΠΎΡΠΈΡΡΠ΅ΡΠΈ ΠΎΠ²Π°Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°ΡΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΡΡΠ»ΡΠ³Π°. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ»ΡΠ³Π° ΠΊΠΎΡΠ° Π½Π΅ ΡΠ°Π΄ΠΈ Π½ΠΈΡΡΠ°:
trait ZeroServiceImpl[F[_]] extends ServiceImpl[F] {
type Config <: Any
def resource(...): ResourceReader[F, Config, Unit] =
Reader(_ => Resource.pure[F, Unit](()))
}(ΠΠΈΠ΄ΠΈ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ Π΄ΡΡΠ³ΠΈΡ
ΡΡΠ»ΡΠ³Π° β ,
.)
Π§Π²ΠΎΡ ΡΠ΅ ΡΠ΅Π΄Π°Π½ ΠΎΠ±ΡΠ΅ΠΊΠ°Ρ ΠΊΠΎΡΠΈ ΠΏΠΎΠΊΡΠ΅ΡΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΡΡΠ»ΡΠ³Π° (ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅ Π»Π°Π½ΡΠ° ΡΠ΅ΡΡΡΡΠ° ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° Π¦Π°ΠΊΠ΅ ΠΠ°ΡΡΠ΅ΡΠ½):
object SingleNodeImpl extends ZeroServiceImpl[IO]
with EchoServiceService
with EchoClientService
with FiniteDurationLifecycleServiceImpl
{
type Config = EchoConfig[String] with EchoClientConfig[String] with FiniteDurationLifecycleConfig
}ΠΠΌΠ°ΡΡΠ΅ Π½Π° ΡΠΌΡ Π΄Π° Ρ ΡΠ²ΠΎΡΡ Π½Π°Π²ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΡΠ°Π½ ΡΠΈΠΏ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΠΊΠΎΡΠΈ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π°Π½ ΠΎΠ²ΠΎΠΌ ΡΠ²ΠΎΡΡ. ΠΠΎΠΌΠΏΠ°ΡΠ»Π΅Ρ Π½Π°ΠΌ Π½Π΅ Π΄ΠΎΠ·Π²ΠΎΡΠ°Π²Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠΎ ΠΎΠ±ΡΠ΅ΠΊΠ°Ρ (Π¦Π°ΠΊΠ΅) ΡΠ° Π½Π΅Π΄ΠΎΠ²ΠΎΡΠ½ΠΈΠΌ ΡΠΈΠΏΠΎΠΌ, ΡΠ΅Ρ ΡΠ²Π°ΠΊΠ° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° ΡΡΠ»ΡΠ³Π΅ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅ΡΠ΅ Π½Π° Config ΡΠΈΠΏ. Π’Π°ΠΊΠΎΡΠ΅ Π½Π΅ΡΠ΅ΠΌΠΎ ΠΌΠΎΡΠΈ Π΄Π° ΠΏΠΎΠΊΡΠ΅Π½Π΅ΠΌΠΎ ΡΠ²ΠΎΡ Π±Π΅Π· ΠΏΡΡΠΆΠ°ΡΠ° ΠΊΠΎΠΌΠΏΠ»Π΅ΡΠ½Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅.
Π Π΅Π·ΠΎΠ»ΡΡΠΈΡΠ° Π°Π΄ΡΠ΅ΡΠ΅ ΡΠ²ΠΎΡΠ°
ΠΠ° Π±ΠΈΡΠΌΠΎ ΡΡΠΏΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ Π²Π΅Π·Ρ ΠΏΠΎΡΡΠ΅Π±Π½Π° Π½Π°ΠΌ ΡΠ΅ ΠΏΡΠ°Π²Π° Π°Π΄ΡΠ΅ΡΠ° Π΄ΠΎΠΌΠ°ΡΠΈΠ½Π° Π·Π° ΡΠ²Π°ΠΊΠΈ ΡΠ²ΠΎΡ. ΠΠΎΠΆΠ΄Π° ΡΠ΅ Π±ΠΈΡΠΈ ΠΏΠΎΠ·Π½Π°ΡΠΎ ΠΊΠ°ΡΠ½ΠΈΡΠ΅ ΠΎΠ΄ ΠΎΡΡΠ°Π»ΠΈΡ Π΄Π΅Π»ΠΎΠ²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅. ΠΠ°ΠΊΠ»Π΅, ΠΏΠΎΡΡΠ΅Π±Π°Π½ Π½Π°ΠΌ ΡΠ΅ Π½Π°ΡΠΈΠ½ Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΠΌΠΎ ΠΌΠ°ΠΏΠΈΡΠ°ΡΠ΅ ΠΈΠ·ΠΌΠ΅ΡΡ ΠΠ-Π° ΡΠ²ΠΎΡΠ° ΠΈ ΡΠ΅Π³ΠΎΠ²Π΅ ΡΡΠ²Π°ΡΠ½Π΅ Π°Π΄ΡΠ΅ΡΠ΅. ΠΠ²ΠΎ ΠΌΠ°ΠΏΠΈΡΠ°ΡΠ΅ ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡΠ°:
case class NodeAddress[NodeId](host: Uri.Host)
trait AddressResolver[F[_]] {
def resolve[NodeId](nodeId: NodeId): F[NodeAddress[NodeId]]
}ΠΠΎΡΡΠΎΡΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΌΠΎΠ³ΡΡΠΈΡ Π½Π°ΡΠΈΠ½Π° Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ ΡΠ°ΠΊΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΡΠ΅.
- ΠΠΊΠΎ Π·Π½Π°ΠΌΠΎ ΡΡΠ²Π°ΡΠ½Π΅ Π°Π΄ΡΠ΅ΡΠ΅ ΠΏΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΠ°ΡΠ°, ΡΠΎΠΊΠΎΠΌ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΠ°ΡΠ° Ρ
ΠΎΡΡΠΎΠ²Π° ΡΠ²ΠΎΡΠΎΠ²Π°, ΠΎΠ½Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ΅ΠΌΠΎ Π‘ΡΠ°Π»Π° ΠΊΠΎΠ΄ ΡΠ° ΡΡΠ²Π°ΡΠ½ΠΈΠΌ Π°Π΄ΡΠ΅ΡΠ°ΠΌΠ° ΠΈ Π·Π°ΡΠΈΠΌ ΠΏΠΎΠΊΡΠ΅Π½Π΅ΠΌΠΎ Π³ΡΠ°Π΄ΡΡ (ΠΊΠΎΡΠ° Π²ΡΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π° ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°ΡΠ°, Π° Π·Π°ΡΠΈΠΌ ΠΏΠΎΠΊΡΠ΅ΡΠ΅ ΠΏΠ°ΠΊΠ΅Ρ Π·Π° ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠ΅). Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°ΡΡ Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡΠ° ΠΌΠ°ΠΏΠΈΡΠ°ΡΠ° ΡΠ΅ ΡΡΠ°ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ·Π½Π°ΡΠ° ΠΈ ΠΌΠΎΠΆΠ΅ ΡΠ΅ ΠΏΠΎΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²ΠΈΡΠΈ Π½Π° Π½Π΅ΡΡΠΎ ΠΏΠΎΠΏΡΡ Π°
Map[NodeId, NodeAddress]. - ΠΠΎΠ½Π΅ΠΊΠ°Π΄ Π΄ΠΎΠ±ΠΈΡΠ°ΠΌΠΎ ΡΡΠ²Π°ΡΠ½Π΅ Π°Π΄ΡΠ΅ΡΠ΅ ΡΠ΅ΠΊ ΠΊΠ°ΡΠ½ΠΈΡΠ΅ ΠΊΠ°Π΄Π° ΡΠ΅ ΡΠ²ΠΎΡ ΡΡΠ²Π°ΡΠ½ΠΎ ΠΏΠΎΠΊΡΠ΅Π½ΡΡ, ΠΈΠ»ΠΈ Π½Π΅ΠΌΠ°ΠΌΠΎ Π°Π΄ΡΠ΅ΡΠ΅ ΡΠ²ΠΎΡΠΎΠ²Π° ΠΊΠΎΡΠΈ ΡΠΎΡ Π½ΠΈΡΡ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠΈ. Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°ΡΡ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΈΠΌΠ°ΡΠΈ ΡΡΠ»ΡΠ³Ρ ΠΎΡΠΊΡΠΈΠ²Π°ΡΠ° ΠΊΠΎΡΠ° ΡΠ΅ ΠΏΠΎΠΊΡΠ΅ΡΠ΅ ΠΏΡΠ΅ ΡΠ²ΠΈΡ ΠΎΡΡΠ°Π»ΠΈΡ ΡΠ²ΠΎΡΠΎΠ²Π° ΠΈ ΡΠ²Π°ΠΊΠΈ ΡΠ²ΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ΠΊΠ»Π°ΠΌΠΈΡΠ° ΡΠ²ΠΎΡΡ Π°Π΄ΡΠ΅ΡΡ Ρ ΡΠΎΡ ΡΡΠ»ΡΠ·ΠΈ ΠΈ Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΡΠΏΠ»Π°ΡΠΈ Π½Π° Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ.
- ΠΠΊΠΎ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌΠΎ
/etc/hosts, ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΡΠ½Π°ΠΏΡΠ΅Π΄ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½Π° ΠΈΠΌΠ΅Π½Π° Ρ ΠΎΡΡΠΎΠ²Π° (Π½ΠΏΡmy-project-main-nodeecho-backend) ΠΈ ΡΠ°ΠΌΠΎ ΠΏΠΎΠ²Π΅ΠΆΠΈΡΠ΅ ΠΎΠ²ΠΎ ΠΈΠΌΠ΅ ΡΠ° ΠΠ Π°Π΄ΡΠ΅ΡΠΎΠΌ Ρ Π²ΡΠ΅ΠΌΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅.
Π£ ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡΡΡ Π½Π΅ ΠΏΠΎΠΊΡΠΈΠ²Π°ΠΌΠΎ ΠΎΠ²Π΅ ΡΠ»ΡΡΠ°ΡΠ΅Π²Π΅ Π΄Π΅ΡΠ°ΡΠ½ΠΈΡΠ΅. Π£ ΡΡΠ²Π°ΡΠΈ, Ρ Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΠ³ΡΠ°ΡΠΊΠ΅ ΡΠ²ΠΈ ΡΠ²ΠΎΡΠΎΠ²ΠΈ ΡΠ΅ ΠΈΠΌΠ°ΡΠΈ ΠΈΡΡΡ ΠΠ Π°Π΄ΡΠ΅ΡΡ - 127.0.0.1.
Π£ ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡΡΡ ΡΠ΅ΠΌΠΎ ΡΠ°Π·ΠΌΠΎΡΡΠΈΡΠΈ Π΄Π²Π° ΡΠ°ΡΠΏΠΎΡΠ΅Π΄Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ΠΎΠ³ ΡΠΈΡΡΠ΅ΠΌΠ°:
- ΠΠ·Π³Π»Π΅Π΄ ΡΠ΅Π΄Π½ΠΎΠ³ ΡΠ²ΠΎΡΠ°, Π³Π΄Π΅ ΡΡ ΡΠ²Π΅ ΡΡΠ»ΡΠ³Π΅ ΡΠΌΠ΅ΡΡΠ΅Π½Π΅ Π½Π° ΡΠ΅Π΄Π½ΠΎΠΌ ΡΠ²ΠΎΡΡ.
- ΠΠ·Π³Π»Π΅Π΄ ΡΠ° Π΄Π²Π° ΡΠ²ΠΎΡΠ°, Π³Π΄Π΅ ΡΡ ΡΡΠ»ΡΠ³Π° ΠΈ ΠΊΠ»ΠΈΡΠ΅Π½Ρ Π½Π° ΡΠ°Π·Π»ΠΈΡΠΈΡΠΈΠΌ ΡΠ²ΠΎΡΠΎΠ²ΠΈΠΌΠ°.
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π·Π° Π° ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ ΡΠ΅ ΡΠ»Π΅Π΄Π΅ΡΠΈ:
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΡΠ΅Π΄Π½ΠΎΠ³ ΡΠ²ΠΎΡΠ°
object SingleNodeConfig extends EchoConfig[String]
with EchoClientConfig[String] with FiniteDurationLifecycleConfig
{
case object Singleton // identifier of the single node
// configuration of server
type NodeId = Singleton.type
def nodeId = Singleton
/** Type safe service port specification. */
override def portNumber: PortNumber = 8088
// configuration of client
/** We'll use the service provided by the same host. */
def echoServiceDependency = echoService
override def testMessage: UrlPathElement = "hello"
def pollInterval: FiniteDuration = 1.second
// lifecycle controller configuration
def lifetime: FiniteDuration = 10500.milliseconds // additional 0.5 seconds so that there are 10 requests, not 9.
}ΠΠ²Π΄Π΅ ΠΊΡΠ΅ΠΈΡΠ°ΠΌΠΎ ΡΠ΅Π΄Π½Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ ΠΊΠΎΡΠ° ΠΏΡΠΎΡΠΈΡΡΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΠΊΠ»ΠΈΡΠ΅Π½ΡΠ°. Π’Π°ΠΊΠΎΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ΅ΠΌΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Ρ ΠΆΠΈΠ²ΠΎΡΠ½ΠΎΠ³ ΡΠΈΠΊΠ»ΡΡΠ° ΠΊΠΎΡΠΈ ΡΠ΅ Π½Π°ΠΊΠΎΠ½ ΡΠΎΠ³Π° Π½ΠΎΡΠΌΠ°Π»Π½ΠΎ ΠΏΡΠ΅ΠΊΠΈΠ½ΡΡΠΈ ΠΊΠ»ΠΈΡΠ΅Π½ΡΠ° ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° lifetime ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΠΏΡΠΎΠ»Π°Π·ΠΈ.
ΠΡΡΠΈ ΡΠΊΡΠΏ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΡΡΠ»ΡΠ³Π΅ ΠΌΠΎΠΆΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ Π·Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄Π° ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ° Π΄Π²Π° ΠΎΠ΄Π²ΠΎΡΠ΅Π½Π° ΡΠ²ΠΎΡΠ°. Π‘Π°ΠΌΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΡΠ²Π°ΡΠ°ΠΌΠΎ ΡΠ° ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°ΡΡΡΠΈΠΌ ΡΡΠ»ΡΠ³Π°ΠΌΠ°:
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π΄Π²Π° ΡΠ²ΠΎΡΠ°
object NodeServerConfig extends EchoConfig[String] with SigTermLifecycleConfig
{
type NodeId = NodeIdImpl
def nodeId = NodeServer
override def portNumber: PortNumber = 8080
}
object NodeClientConfig extends EchoClientConfig[String] with FiniteDurationLifecycleConfig
{
// NB! dependency specification
def echoServiceDependency = NodeServerConfig.echoService
def pollInterval: FiniteDuration = 1.second
def lifetime: FiniteDuration = 10500.milliseconds // additional 0.5 seconds so that there are 10 request, not 9.
def testMessage: String = "dolly"
}ΠΠΎΠ³Π»Π΅Π΄Π°ΡΡΠ΅ ΠΊΠ°ΠΊΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠΈΡΠ°ΠΌΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ. ΠΠΎΠΌΠΈΡΠ΅ΠΌΠΎ ΠΏΡΡΠΆΠ΅Π½Ρ ΡΡΠ»ΡΠ³Ρ Π΄ΡΡΠ³ΠΎΠ³ ΡΠ²ΠΎΡΠ° ΠΊΠ°ΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ ΡΡΠ΅Π½ΡΡΠ½ΠΎΠ³ ΡΠ²ΠΎΡΠ°. Π’ΠΈΠΏ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½ ΡΠ΅Ρ ΡΠ°Π΄ΡΠΆΠΈ ΡΠ°Π½ΡΠΎΠΌΡΠΊΠΈ ΡΠΈΠΏ ΠΊΠΎΡΠΈ ΠΎΠΏΠΈΡΡΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ». Π ΡΠΎΠΊΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π° ΡΠ°Π΄Π° ΠΈΠΌΠ°ΡΠ΅ΠΌΠΎ ΠΈΡΠΏΡΠ°Π²Π°Π½ ΠΠ ΡΠ²ΠΎΡΠ°. ΠΠ²ΠΎ ΡΠ΅ ΡΠ΅Π΄Π°Π½ ΠΎΠ΄ Π²Π°ΠΆΠ½ΠΈΡ Π°ΡΠΏΠ΅ΠΊΠ°ΡΠ° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎΠ³ ΠΏΡΠΈΡΡΡΠΏΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΈ. ΠΡΡΠΆΠ° Π½Π°ΠΌ ΠΌΠΎΠ³ΡΡΠ½ΠΎΡΡ Π΄Π° ΡΠ°ΠΌΠΎ ΡΠ΅Π΄Π½ΠΎΠΌ ΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠΎ ΠΏΠΎΡΡ ΠΈ Π΄Π° ΡΠ΅ ΡΠ²Π΅ΡΠΈΠΌΠΎ Π΄Π° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈΡΠ°ΠΌΠΎ ΠΈΡΠΏΡΠ°Π²Π°Π½ ΠΏΠΎΡΡ.
ΠΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π΄Π²Π° ΡΠ²ΠΎΡΠ°
ΠΠ° ΠΎΠ²Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ ΠΏΠΎΡΠΏΡΠ½ΠΎ ΠΈΡΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅ ΡΡΠ»ΡΠ³Π°. ΠΠ΅ΠΌΠ° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈΡ ΠΏΡΠΎΠΌΠ΅Π½Π°. ΠΠ΅ΡΡΡΠΈΠΌ, ΠΌΠΈ ΠΊΡΠ΅ΠΈΡΠ°ΠΌΠΎ Π΄Π²Π΅ ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅ ΡΠ²ΠΎΡΠ° ΠΊΠΎΡΠ΅ ΡΠ°Π΄ΡΠΆΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΡ ΡΠΊΡΠΏ ΡΡΠ»ΡΠ³Π°:
object TwoJvmNodeServerImpl extends ZeroServiceImpl[IO] with EchoServiceService with SigIntLifecycleServiceImpl {
type Config = EchoConfig[String] with SigTermLifecycleConfig
}
object TwoJvmNodeClientImpl extends ZeroServiceImpl[IO] with EchoClientService with FiniteDurationLifecycleServiceImpl {
type Config = EchoClientConfig[String] with FiniteDurationLifecycleConfig
}ΠΡΠ²ΠΈ ΡΠ²ΠΎΡ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° ΡΠ΅ΡΠ²Π΅Ρ ΠΈ ΠΏΠΎΡΡΠ΅Π±Π½Π° ΠΌΡ ΡΠ΅ ΡΠ°ΠΌΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π½Π° ΡΡΡΠ°Π½ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΡΡΠ³ΠΈ ΡΠ²ΠΎΡ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° ΠΊΠ»ΠΈΡΠ΅Π½ΡΠ° ΠΈ ΡΡΠ΅Π±Π° ΠΌΡ Π΄ΡΡΠ³ΠΈ Π΄Π΅ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅. ΠΠ±Π° ΡΠ²ΠΎΡΠ° Π·Π°Ρ
ΡΠ΅Π²Π°ΡΡ Π½Π΅ΠΊΠ΅ Π΄ΠΎΠΆΠΈΠ²ΠΎΡΠ½Π΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅. ΠΠ° ΠΏΠΎΡΡΠ΅Π±Π΅ ΠΎΠ²Π΅ ΠΏΠΎΡΡΠ°Π½ΡΠΊΠ΅ ΡΡΠ»ΡΠ³Π΅ ΡΠ²ΠΎΡ ΡΠ΅ ΠΈΠΌΠ°ΡΠΈ Π±Π΅ΡΠΊΠΎΠ½Π°ΡΠ°Π½ ΠΆΠΈΠ²ΠΎΡΠ½ΠΈ Π²Π΅ΠΊ ΠΊΠΎΡΠΈ ΡΠ΅ ΠΌΠΎΠΆΠ΅ ΠΏΡΠ΅ΠΊΠΈΠ½ΡΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΠΌ SIGTERM, Π΄ΠΎΠΊ ΡΠ΅ Π΅Ρ
ΠΎ ΠΊΠ»ΠΈΡΠ΅Π½Ρ ΠΏΡΠ΅ΠΊΠΈΠ½ΡΡΠΈ Π½Π°ΠΊΠΎΠ½ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΎΠ³ ΠΊΠΎΠ½Π°ΡΠ½ΠΎΠ³ ΡΡΠ°ΡΠ°ΡΠ°. ΠΠΈΠ΄ΠΈΡΠ΅ Π·Π° Π΄Π΅ΡΠ°ΡΠ΅.
Π£ΠΊΡΠΏΠ°Π½ ΠΏΡΠΎΡΠ΅Ρ ΡΠ°Π·Π²ΠΎΡΠ°
Π₯Π°ΡΠ΄Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠΎ ΠΊΠ°ΠΊΠΎ ΠΎΠ²Π°Ρ ΠΏΡΠΈΡΡΡΠΏ ΠΌΠ΅ΡΠ° Π½Π°ΡΠΈΠ½ Π½Π° ΠΊΠΎΡΠΈ ΡΠ°Π΄ΠΈΠΌΠΎ ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΎΠΌ.
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΠΊΠ°ΠΎ ΠΊΠΎΠ΄ ΡΠ΅ Π±ΠΈΡΠΈ ΠΏΡΠ΅Π²Π΅Π΄Π΅Π½Π° ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡ. Π§ΠΈΠ½ΠΈ ΡΠ΅ ΡΠ°Π·ΡΠΌΠ½ΠΈΠΌ ΠΎΠ΄Π²ΠΎΡΠΈΡΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΠΎΠ΄ ΠΎΡΡΠ°Π»ΠΈΡ Π°ΡΡΠ΅ΡΠ°ΠΊΠ°ΡΠ° ΠΊΠΎΠ΄Π°. Π§Π΅ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΈΠΌΠ°ΡΠΈ ΠΌΠ½ΠΎΡΡΠ²ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π½Π° ΠΈΡΡΠΎΡ Π±Π°Π·ΠΈ ΠΊΠΎΠ΄Π°. Π Π½Π°ΡΠ°Π²Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΈΠΌΠ°ΡΠΈ Π²ΠΈΡΠ΅ Π²Π΅ΡΠ·ΠΈΡΠ° ΡΠ°Π·Π»ΠΈΡΠΈΡΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½ΠΈΡ Π³ΡΠ°Π½Π°. Π£ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΈΠ·Π°Π±ΡΠ°ΡΠΈ ΠΎΠ΄ΡΠ΅ΡΠ΅Π½Π΅ Π²Π΅ΡΠ·ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΈ ΡΠΎ ΡΠ΅ ΠΎΡΡΠ°ΡΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎ ΠΊΠ°Π΄ Π³ΠΎΠ΄ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΎΠ²Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ.
ΠΡΠΎΠΌΠ΅Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ°ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π° ΠΊΠΎΠ΄Π°. ΠΠ°ΠΊΠ»Π΅, ΡΡΠ΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΠΎΠΊΡΠΈΠ²Π΅Π½ ΠΈΡΡΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΠΎΠΌ ΠΎΡΠΈΠ³ΡΡΠ°ΡΠ° ΠΊΠ²Π°Π»ΠΈΡΠ΅ΡΠ°:
Π£Π»Π°Π·Π½ΠΈΡΠ° -> ΠΠ -> ΠΏΡΠ΅Π³Π»Π΅Π΄ -> ΡΠΏΠ°ΡΠ°ΡΠ΅ -> ΠΊΠΎΠ½ΡΠΈΠ½ΡΠΈΡΠ°Π½Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠ° -> ΠΊΠΎΠ½ΡΠΈΠ½ΡΠΈΡΠ°Π½Π° ΠΏΡΠΈΠΌΠ΅Π½Π°
ΠΠΎΡΡΠΎΡΠ΅ ΡΠ»Π΅Π΄Π΅ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΈΡΠ΅ ΠΏΡΠΈΡΡΡΠΏΠ°:
- ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΡΠ΅ ΠΊΠΎΡ Π΅ΡΠ΅Π½ΡΠ½Π° Π·Π° ΠΎΠ΄ΡΠ΅ΡΠ΅Π½Ρ ΠΈΠ½ΡΡΠ°Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°. Π§ΠΈΠ½ΠΈ ΡΠ΅ Π΄Π° Π½Π΅ ΠΏΠΎΡΡΠΎΡΠΈ Π½Π°ΡΠΈΠ½ Π΄Π° ΠΈΠΌΠ°ΡΠ΅ ΠΏΠΎΠ³ΡΠ΅ΡΠ½Ρ Π²Π΅Π·Ρ ΠΈΠ·ΠΌΠ΅ΡΡ ΡΠ²ΠΎΡΠΎΠ²Π°.
- ΠΠΈΡΠ΅ Π»Π°ΠΊΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ ΡΠ°ΠΌΠΎ Ρ ΡΠ΅Π΄Π½ΠΎΠΌ ΡΠ²ΠΎΡΡ. Π§ΠΈΠ½ΠΈ ΡΠ΅ Π½Π΅ΡΠ°Π·ΡΠΌΠ½ΠΈΠΌ Π΄Π° ΡΠ΅ ΠΏΡΠΈΡΠ°Π²ΠΈΡΠ΅ ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π½Π΅ΠΊΠ΅ ΡΠ΅ΠΊΡΡΡΠ°Π»Π½Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅. ΠΠ°ΠΊΠ»Π΅, ΠΎΠ΄ΡΡΡΠΏΠ°ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ°ΡΠ΅ ΠΌΠ°ΡΠ΅ ΠΌΠΎΠ³ΡΡΠ΅.
- ΠΠ°Π»Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ Π½ΠΈΡΠ΅ Π»Π°ΠΊΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠΈ.
- ΠΠ΅ΡΠΈΠ½Π° ΠΏΡΠΎΠΌΠ΅Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠ°ΡΠΈΡΠΈ ΠΈΡΡΠΈ ΠΏΡΠΎΡΠ΅Ρ ΡΠ°Π·Π²ΠΎΡΠ° ΠΈ ΠΏΡΠΎΡΠΈ ΡΠ΅ Π½Π΅ΠΊΠΈ ΠΏΡΠ΅Π³Π»Π΅Π΄.
ΠΠ° Π»ΠΈ Π½Π°ΠΌ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΠΏΠΎΡΠ΅Π±Π½ΠΎ ΡΠΏΡΠ΅ΠΌΠΈΡΡΠ΅ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΠ΅? ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°Π΄ΡΠΆΠΈ ΠΎΡΠ΅ΡΡΠΈΠ²Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ΅ ΠΊΠΎΡΠ΅ Π±ΠΈΡΠΌΠΎ ΠΆΠ΅Π»Π΅Π»ΠΈ Π΄Π° Π΄ΡΠΆΠΈΠΌΠΎ Π²Π°Π½ Π΄ΠΎΡ Π²Π°ΡΠ° ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΡΠ΄ΠΈ. ΠΠ°ΠΊΠ»Π΅, ΠΌΠΎΠΆΠ΄Π° Π±ΠΈ Π±ΠΈΠ»ΠΎ Π²ΡΠ΅Π΄Π½ΠΎ ΡΡΠ²Π°ΡΠΈ ΠΎΠ΄Π²ΠΎΡΠ΅Π½ΠΎ ΡΠΏΡΠ΅ΠΌΠΈΡΡΠ΅ ΡΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΌ ΠΏΡΠΈΡΡΡΠΏΠΎΠΌ ΠΊΠΎΡΠ΅ ΡΠ΅ ΡΠ°Π΄ΡΠΆΠ°ΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΠ΅. ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΠΈ Π½Π° Π΄Π²Π° Π΄Π΅Π»Π° β ΡΠ΅Π΄Π°Π½ ΠΊΠΎΡΠΈ ΡΠ°Π΄ΡΠΆΠΈ Π½Π°ΡΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΠ΅ ΠΈ ΠΎΠ½Π°Ρ ΠΊΠΎΡΠΈ ΡΠ°Π΄ΡΠΆΠΈ ΡΠ°ΡΠ½ΠΈ Π΄Π΅ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅. ΠΠ²ΠΎ Π±ΠΈ ΠΎΠΌΠΎΠ³ΡΡΠΈΠ»ΠΎ ΠΏΡΠΈΡΡΡΠΏ Π²Π΅ΡΠΈΠ½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ° Π²Π΅Π»ΠΈΠΊΠΎΡ Π²Π΅ΡΠΈΠ½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠ° Π΄ΠΎΠΊ Π±ΠΈ ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠΎ ΠΏΡΠΈΡΡΡΠΏ Π·Π°ΠΈΡΡΠ° ΠΎΡΠ΅ΡΡΠΈΠ²ΠΈΠΌ ΡΡΠ²Π°ΡΠΈΠΌΠ°. Π’ΠΎ ΡΠ΅ Π»Π°ΠΊΠΎ ΠΏΠΎΡΡΠΈΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΠΌ ΡΡΠ΅Π΄ΡΠΈΡ ΠΎΡΠΎΠ±ΠΈΠ½Π° ΡΠ° ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π½ΠΈΠΌ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈΠΌΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠ°.
ΠΠ°ΡΠΈΡΠ°ΡΠΈΡΠ΅
Π₯Π°ΡΠ΄Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠΎ ΠΏΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎΠ³ ΠΏΡΠΈΡΡΡΠΏΠ° Ρ ΠΏΠΎΡΠ΅ΡΠ΅ΡΡ ΡΠ° Π΄ΡΡΠ³ΠΈΠΌ ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΠΌΠ° ΡΠΏΡΠ°Π²ΡΠ°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΎΠΌ.
ΠΡΠ΅ ΡΠ²Π΅Π³Π°, Π½Π°Π²Π΅ΡΡΠ΅ΠΌΠΎ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° Π·Π° ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ Π°ΡΠΏΠ΅ΠΊΡΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎΠ³ Π½Π°ΡΠΈΠ½Π° ΡΠ΅ΡΠ°Π²Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅:
- Π’Π΅ΠΊΡΡΡΠ°Π»Π½ΠΈ ΡΠ°ΡΠ» Π½Π° ΡΠΈΡΠ½ΠΎΡ ΠΌΠ°ΡΠΈΠ½ΠΈ.
- Π¦Π΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ ΠΊΡΡΡ/Π²ΡΠ΅Π΄Π½ΠΎΡΡ (Π½ΠΏΡ
etcd/zookeeper). - ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅ ΠΏΠΎΡΠΏΡΠΎΡΠ΅ΡΠ° ΠΊΠΎΡΠ΅ ΡΠ΅ ΠΌΠΎΠ³Ρ ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠΈ/ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠΈ Π±Π΅Π· ΠΏΠΎΠ½ΠΎΠ²Π½ΠΎΠ³ ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ° ΠΏΡΠΎΡΠ΅ΡΠ°.
- ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π²Π°Π½ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ Π°ΡΡΠ΅ΡΠ°ΠΊΠ°ΡΠ° ΠΈ Π²Π΅ΡΠ·ΠΈΡΠ°.
Π’Π΅ΠΊΡΡΡΠ°Π»Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Π΄Π°ΡΠ΅ ΠΎΠ΄ΡΠ΅ΡΠ΅Π½Ρ ΡΠ»Π΅ΠΊΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡ Ρ ΡΠΌΠΈΡΠ»Ρ Π°Π΄-Ρ ΠΎΡ ΠΏΠΎΠΏΡΠ°Π²ΠΊΠΈ. ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΡΠ°Π²ΠΈ Π½Π° ΡΠΈΡΠ½ΠΈ ΡΠ²ΠΎΡ, ΠΈΠ·Π²ΡΡΠΈ ΠΏΡΠΎΠΌΠ΅Π½Ρ ΠΈ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠΊΡΠ΅Π½Π΅ ΡΡΠ»ΡΠ³Ρ. ΠΠ²ΠΎ ΠΌΠΎΠΆΠ΄Π° Π½Π΅ΡΠ΅ Π±ΠΈΡΠΈ Π΄ΠΎΠ±ΡΠΎ Π·Π° Π²Π΅ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ΅. ΠΠ·Π° ΠΏΡΠΎΠΌΠ΅Π½Π° Π½Π΅ ΠΎΡΡΠ°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΡΡΠ°Π³ΠΎΠ²ΠΈ. ΠΡΠΎΠΌΠ΅Π½Ρ Π½Π΅ ΠΏΡΠ΅Π³Π»Π΅Π΄Π° Π΄ΡΡΠ³ΠΈ ΠΏΠ°Ρ ΠΎΡΠΈΡΡ. ΠΠΎΠΆΠ΄Π° ΡΠ΅ Π±ΠΈΡΠΈ ΡΠ΅ΡΠΊΠΎ ΠΎΡΠΊΡΠΈΡΠΈ ΡΡΠ° ΡΠ΅ ΠΈΠ·Π°Π·Π²Π°Π»ΠΎ ΠΏΡΠΎΠΌΠ΅Π½Ρ. ΠΠΈΡΠ΅ ΡΠ΅ΡΡΠΈΡΠ°Π½ΠΎ. ΠΠ· ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ΠΎΠ³ ΡΠΈΡΡΠ΅ΠΌΠ°, Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ ΠΌΠΎΠΆΠ΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ Π·Π°Π±ΠΎΡΠ°Π²ΠΈΡΠΈ Π΄Π° Π°ΠΆΡΡΠΈΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ Ρ ΡΠ΅Π΄Π½ΠΎΠΌ ΠΎΠ΄ Π΄ΡΡΠ³ΠΈΡ ΡΠ²ΠΎΡΠΎΠ²Π°.
(ΠΡΠ², Π°ΠΊΠΎ Π½Π° ΠΊΡΠ°ΡΡ Π±ΡΠ΄Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ Π΄Π° ΠΏΠΎΡΠ½Π΅ΠΌΠΎ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ ΡΠ΅ΠΊΡΡΡΠ°Π»Π½Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅, ΠΌΠΎΡΠ°ΡΠ΅ΠΌΠΎ ΡΠ°ΠΌΠΎ Π΄Π° Π΄ΠΎΠ΄Π°ΠΌΠΎ ΠΏΠ°ΡΡΠ΅Ρ + Π²Π°Π»ΠΈΠ΄Π°ΡΠΎΡ ΠΊΠΎΡΠΈ Π±ΠΈ ΠΌΠΎΠ³Π°ΠΎ Π΄Π° ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅ ΠΈΡΡΠΎ Config ΡΠΊΡΡΠ°ΡΡΠ΅ ΠΈ ΡΠΎ Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄ΠΎΠ²ΠΎΡΠ½ΠΎ Π΄Π° ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΡΠ΅ΠΊΡΡΡΠ°Π»Π½Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅. ΠΠ²ΠΎ ΡΠ°ΠΊΠΎΡΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΡΠ΅ Π΄Π° ΡΠ΅ ΡΠ»ΠΎΠΆΠ΅Π½ΠΎΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π° ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°ΡΠ° ΠΌΠ°Π»ΠΎ ΠΌΠ°ΡΠ° ΠΎΠ΄ ΡΠ»ΠΎΠΆΠ΅Π½ΠΎΡΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π·Π°ΡΠ½ΠΎΠ²Π°Π½ΠΈΡ
Π½Π° ΡΠ΅ΠΊΡΡΡ, ΡΠ΅Ρ Π½Π°ΠΌ ΡΠ΅ Ρ Π²Π΅ΡΠ·ΠΈΡΠΈ Π·Π°ΡΠ½ΠΎΠ²Π°Π½ΠΎΡ Π½Π° ΡΠ΅ΠΊΡΡΡ ΠΏΠΎΡΡΠ΅Π±Π°Π½ Π΄ΠΎΠ΄Π°ΡΠ½ΠΈ ΠΊΠΎΠ΄.)
Π¦Π΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ ΠΊΡΡΡ/Π²ΡΠ΅Π΄Π½ΠΎΡΡ ΡΠ΅ Π΄ΠΎΠ±Π°Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·Π°ΠΌ Π·Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΡ ΠΌΠ΅ΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅. ΠΠ²Π΄Π΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ°Π·ΠΌΠΈΡΠ»ΠΈΠΌΠΎ ΠΎ ΡΠΎΠΌΠ΅ ΡΡΠ° ΡΠΌΠ°ΡΡΠ°ΠΌΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½ΠΈΠΌ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈΠΌΠ°, Π° ΡΡΠ° ΡΠ°ΠΌΠΎ ΠΏΠΎΠ΄Π°ΡΠΈΠΌΠ°. ΠΠ°Π΄Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡΠ° C => A => B ΠΎΠ±ΠΈΡΠ½ΠΎ Π½Π°Π·ΠΈΠ²Π°ΠΌΠΎ ΡΠ΅ΡΠΊΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²ΠΈΠΌ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈΠΌΠ° C βΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°β, Π΄ΠΎΠΊ ΡΠ΅ΡΡΠΎ ΠΌΠ΅ΡΠ°Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΈ A - ΡΠ°ΠΌΠΎ ΡΠ½Π΅ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΊΠ΅. ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ ΡΡΠ΅Π±Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΡΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΈ ΡΠ°Π½ΠΈΡΠ΅ ΠΎΠ΄ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° A. ΠΠΌΠ°ΡΡΡΠΈ Ρ Π²ΠΈΠ΄Ρ ΠΎΠ²Ρ ΠΈΠ΄Π΅ΡΡ, ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΡΠ΅ΡΠΈ Π΄Π° ΡΠ΅ ΠΎΡΠ΅ΠΊΠΈΠ²Π°Π½Π° ΡΡΠ΅ΡΡΠ°Π»ΠΎΡΡ ΠΏΡΠΎΠΌΠ΅Π½Π° ΠΎΠ½ΠΎ ΡΡΠΎ Π±ΠΈ ΡΠ΅ ΠΌΠΎΠ³Π»ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ Π·Π° ΡΠ°Π·Π»ΠΈΠΊΠΎΠ²Π°ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½ΠΈΡ
ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΠΎΠ΄ ΡΠ°ΠΌΠΎ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°. Π’Π°ΠΊΠΎΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΈ ΠΎΠ±ΠΈΡΠ½ΠΎ Π΄ΠΎΠ»Π°Π·Π΅ ΠΈΠ· ΡΠ΅Π΄Π½ΠΎΠ³ ΠΈΠ·Π²ΠΎΡΠ° (ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠ°), Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π΄ΠΎΠ»Π°Π·ΠΈ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ ΠΈΠ·Π²ΠΎΡΠ° (Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°). ΠΠ°Π²ΡΠ΅ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠΌΠ° ΠΊΠΎΡΠΈ ΡΠ΅ ΠΌΠΎΠ³Ρ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠΈ Π½Π°ΠΊΠΎΠ½ ΠΏΡΠΎΡΠ΅ΡΠ° ΠΈΠ½ΠΈΡΠΈΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΠ΅ Π΄ΠΎΠ²ΠΎΠ΄ΠΈ Π΄ΠΎ ΠΏΠΎΠ²Π΅ΡΠ°ΡΠ° ΡΠ»ΠΎΠΆΠ΅Π½ΠΎΡΡΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅. ΠΠ° ΡΠ°ΠΊΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ ΠΌΠΎΡΠ°ΡΠ΅ΠΌΠΎ Π΄Π° ΡΠ΅ Π±Π°Π²ΠΈΠΌΠΎ ΡΠΈΡ
ΠΎΠ²ΠΈΠΌ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠΎΠΌ ΠΈΡΠΏΠΎΡΡΠΊΠ΅, ΡΠ°ΡΡΠ»Π°ΡΠΈΠ²Π°ΡΠ΅ΠΌ ΠΈ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡΠΎΠΌ, ΡΡΠΊΠΎΠ²Π°ΡΠ΅ΠΌ Π½Π΅ΡΠ°ΡΠ½ΠΈΠΌ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈΠΌΠ°. Π‘ΡΠΎΠ³Π°, Π΄Π° Π±ΠΈΡΠΌΠΎ ΡΠΌΠ°ΡΠΈΠ»ΠΈ ΡΠ»ΠΎΠΆΠ΅Π½ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, Π±ΠΎΡΠ΅ Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄Π° ΡΠΌΠ°ΡΠΈΠΌΠΎ Π±ΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠ° ΠΊΠΎΡΠΈ ΡΠ΅ ΠΌΠΎΠ³Ρ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠΈ ΡΠΎΠΊΠΎΠΌ ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ° (ΠΈΠ»ΠΈ ΠΈΡ
ΡΠ°ΠΊ ΠΏΠΎΡΠΏΡΠ½ΠΎ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ°ΡΠΈ).
ΠΠ· ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π΅ ΠΎΠ²ΠΎΠ³ ΠΏΠΎΡΡΠ° ΡΡΠ΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠΎ ΡΠ°Π·Π»ΠΈΠΊΡ ΠΈΠ·ΠΌΠ΅ΡΡ ΡΡΠ°ΡΠΈΡΠΊΠΈΡ
ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠΊΠΈΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠ°. ΠΠΊΠΎ Π»ΠΎΠ³ΠΈΠΊΠ° ΡΠ΅ΡΠ²ΠΈΡΠ° Π·Π°Ρ
ΡΠ΅Π²Π° ΡΠ΅ΡΠΊΡ ΠΏΡΠΎΠΌΠ΅Π½Ρ Π½Π΅ΠΊΠΈΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠ° ΡΠΎΠΊΠΎΠΌ ΡΠ°Π΄Π°, ΠΎΠ½Π΄Π° ΠΈΡ
ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π½Π°Π·Π²Π°ΡΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠΊΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠΌΠ°. ΠΠ½Π°ΡΠ΅ ΡΡ ΡΡΠ°ΡΠΈΡΠ½Π΅ ΠΈ ΠΌΠΎΠ³Ρ ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΠΌ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎΠ³ ΠΏΡΠΈΡΡΡΠΏΠ°. ΠΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠΊΡ ΡΠ΅ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ ΠΌΠΎΠ³Ρ Π±ΠΈΡΠΈ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΈΡΡΡΠΏΠΈ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π΅Π»ΠΎΠ²ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΎΠ³Ρ ΡΠ΅ ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠΈ ΡΠ° Π½ΠΎΠ²ΠΈΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½ΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠΌΠ° Π½Π° ΡΠ»ΠΈΡΠ°Π½ Π½Π°ΡΠΈΠ½ ΠΊΠ°ΠΎ ΡΡΠΎ ΡΠ΅ ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠΊΡΠ΅ΡΠ΅ ΠΎΠ΄Π²ΠΎΡΠ΅Π½ΠΈ ΠΏΡΠΎΡΠ΅Ρ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ΠΎΠ³ ΡΠΈΡΡΠ΅ΠΌΠ°.
(ΠΠΎΡΠ΅ ΡΠΊΡΠΎΠΌΠ½ΠΎ ΠΌΠΈΡΡΠ΅ΡΠ΅ ΡΠ΅ Π΄Π° ΠΈΠ·Π±Π΅Π³Π°Π²Π°ΠΌ ΡΠ΅ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π° ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ° ΡΠ΅Ρ ΡΠΎ ΠΏΠΎΠ²Π΅ΡΠ°Π²Π° ΡΠ»ΠΎΠΆΠ΅Π½ΠΎΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°.
ΠΠΎΠΆΠ΄Π° Π±ΠΈ Π±ΠΈΠ»ΠΎ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΈΡΠ΅ ΠΎΡΠ»ΠΎΠ½ΠΈΡΠΈ ΡΠ΅ Π½Π° ΠΏΠΎΠ΄ΡΡΠΊΡ ΠΠ‘-Π° Π·Π° ΠΏΠΎΠ½ΠΎΠ²Π½ΠΎ ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠ°. ΠΠ°Π΄Π°, ΡΠΎ ΠΌΠΎΠΆΠ΄Π° Π½ΠΈΡΠ΅ ΡΠ²Π΅ΠΊ ΠΌΠΎΠ³ΡΡΠ΅.)
ΠΠ΅Π΄Π°Π½ Π²Π°ΠΆΠ°Π½ Π°ΡΠΏΠ΅ΠΊΡ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ° ΡΡΠ°ΡΠΈΡΠΊΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΠΊΠΎΡΠΈ ΠΏΠΎΠ½Π΅ΠΊΠ°Π΄ Π½Π°Π²ΠΎΠ΄ΠΈ ΡΡΠ΄Π΅ Π΄Π° ΡΠ°Π·ΠΌΠΎΡΡΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠΊΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ (Π±Π΅Π· Π΄ΡΡΠ³ΠΈΡ ΡΠ°Π·Π»ΠΎΠ³Π°) ΡΠ΅ ΠΏΡΠ΅ΠΊΠΈΠ΄ ΡΠ΅ΡΠ²ΠΈΡΠ° ΡΠΎΠΊΠΎΠΌ Π°ΠΆΡΡΠΈΡΠ°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅. ΠΠ°ΠΈΡΡΠ°, Π°ΠΊΠΎ ΠΌΠΎΡΠ°ΠΌΠΎ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠΌΠΎ ΡΡΠ°ΡΠΈΡΠΊΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ, ΠΌΠΎΡΠ°ΠΌΠΎ ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠΈ ΡΠΈΡΡΠ΅ΠΌ ΠΊΠ°ΠΊΠΎ Π±ΠΈ Π½ΠΎΠ²Π΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΠΏΠΎΡΡΠ°Π»Π΅ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½Π΅. ΠΠ°Ρ ΡΠ΅Π²ΠΈ Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π·Π°ΡΡΠΎΡΠ° ΡΠ΅ ΡΠ°Π·Π»ΠΈΠΊΡΡΡ Π·Π° ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΡΠ°ΠΊΠΎ Π΄Π° ΡΠΎ ΠΌΠΎΠΆΠ΄Π° Π½ΠΈΡΠ΅ ΡΠΎΠ»ΠΈΠΊΠΎ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ. ΠΠΊΠΎ ΡΠ΅ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ, ΠΎΠ½Π΄Π° ΠΌΠΎΡΠ°ΠΌΠΎ ΡΠ½Π°ΠΏΡΠ΅Π΄ ΠΏΠ»Π°Π½ΠΈΡΠ°ΡΠΈ Π±ΠΈΠ»ΠΎ ΠΊΠΎΡΠ΅ ΠΏΠΎΠ½ΠΎΠ²Π½ΠΎ ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ°. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠ³Π»ΠΈ Π±ΠΈΡΠΌΠΎ Π΄Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°ΠΌΠΎ . Π£ ΠΎΠ²ΠΎΠΌ ΡΡΠ΅Π½Π°ΡΠΈΡΡ ΠΊΠ°Π΄ Π³ΠΎΠ΄ ΡΡΠ΅Π±Π° Π΄Π° ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠΊΡΠ΅Π½Π΅ΠΌΠΎ ΡΠΈΡΡΠ΅ΠΌ, ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΠΏΠΎΠΊΡΠ΅ΡΠ΅ΠΌΠΎ Π½ΠΎΠ²Ρ ΠΈΠ½ΡΡΠ°Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°, Π° Π·Π°ΡΠΈΠΌ ΠΏΡΠ΅Π±Π°ΡΠΈΠΌΠΎ ΠΠΠ Π½Π° ΡΡ, Π΄ΠΎΠΊ ΡΡΠ°ΡΠΎΠΌ ΡΠΈΡΡΠ΅ΠΌΡ Π΄ΠΎΠ·Π²ΠΎΡΠ°Π²Π°ΠΌΠΎ Π΄Π° Π·Π°Π²ΡΡΠΈ ΡΠ΅ΡΠ²ΠΈΡΠΈΡΠ°ΡΠ΅ ΠΏΠΎΡΡΠΎΡΠ΅ΡΠΈΡ Π²Π΅Π·Π°.
Π¨ΡΠ° ΡΠ΅ ΡΠ° Π΄ΡΠΆΠ°ΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΡΠ½ΡΡΠ°Ρ Π²Π΅ΡΠ·ΠΈΠΎΠ½ΠΈΡΠ°Π½ΠΎΠ³ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° ΠΈΠ»ΠΈ ΡΠΏΠΎΡΠ°? ΠΠ΄ΡΠΆΠ°Π²Π°ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΡΠ½ΡΡΠ°Ρ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° Π·Π½Π°ΡΠΈ Ρ Π²Π΅ΡΠΈΠ½ΠΈ ΡΠ»ΡΡΠ°ΡΠ΅Π²Π° Π΄Π° ΡΠ΅ ΠΎΠ²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΠΏΡΠΎΡΠ»Π° ΠΈΡΡΠΈ ΠΏΡΠΎΡΠ΅Ρ ΠΎΡΠΈΠ³ΡΡΠ°ΡΠ° ΠΊΠ²Π°Π»ΠΈΡΠ΅ΡΠ° ΠΊΠ°ΠΎ ΠΈ Π΄ΡΡΠ³ΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ. ΠΠ°ΠΊΠ»Π΅, Π½Π΅ΠΊΠΎ ΠΌΠΎΠΆΠ΅ Π±ΠΈΡΠΈ ΡΠΈΠ³ΡΡΠ°Π½ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π΄ΠΎΠ±ΡΠΎΠ³ ΠΊΠ²Π°Π»ΠΈΡΠ΅ΡΠ° ΠΈ ΠΏΠΎΡΠ·Π΄Π°Π½Π°. ΠΠ°ΠΏΡΠΎΡΠΈΠ², ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Ρ ΠΏΠΎΡΠ΅Π±Π½ΠΎΠΌ ΡΠ°ΡΠ»Ρ Π·Π½Π°ΡΠΈ Π΄Π° Π½Π΅ΠΌΠ° ΡΡΠ°Π³ΠΎΠ²Π° ΠΊΠΎ ΡΠ΅ ΠΈ Π·Π°ΡΡΠΎ ΠΈΠ·Π²ΡΡΠΈΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅ Ρ ΡΠΎΡ Π΄Π°ΡΠΎΡΠ΅ΡΠΈ. ΠΠ° Π»ΠΈ ΡΠ΅ ΠΎΠ²ΠΎ Π²Π°ΠΆΠ½ΠΎ? ΠΠ΅ΡΡΡΠ΅ΠΌΠΎ Π΄Π° ΡΠ΅ Π·Π° Π²Π΅ΡΠΈΠ½Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ° Π±ΠΎΡΠ΅ ΠΈΠΌΠ°ΡΠΈ ΡΡΠ°Π±ΠΈΠ»Π½Ρ ΠΈ ΠΊΠ²Π°Π»ΠΈΡΠ΅ΡΠ½Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ.
ΠΠ΅ΡΠ·ΠΈΡΠ° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° Π΄Π° ΡΠ΅ ΡΠ°Π·Π½Π° ΠΊΠ°Π΄Π° ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°Π½, ΠΊΠΎΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΡΠ°Π΄ΡΠΆΠΈ, ΠΊΠΎΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡΠ΅ ΡΡ ΠΎΠΌΠΎΠ³ΡΡΠ΅Π½Π΅/ΠΎΠ½Π΅ΠΌΠΎΠ³ΡΡΠ΅Π½Π΅, ΠΊΠΎ ΡΠ΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ°Π½ Π·Π° ΡΠ²Π°ΠΊΡ ΠΏΡΠΎΠΌΠ΅Π½Ρ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΈ. ΠΠΎΠΆΠ΄Π° ΡΠ΅ Π±ΠΈΡΠΈ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΠΌΠ°Π»ΠΎ ΡΡΡΠ΄Π° Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π·Π°Π΄ΡΠΆΠΈ ΡΠ½ΡΡΠ°Ρ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° ΠΈ ΡΠΎ ΡΠ΅ ΠΈΠ·Π±ΠΎΡ Π΄ΠΈΠ·Π°ΡΠ½Π°.
ΠΡΠ΅Π΄Π½ΠΎΡΡ ΠΠ°Π½Π΅
ΠΠ²Π΄Π΅ Π±ΠΈΡΠΌΠΎ ΠΆΠ΅Π»Π΅Π»ΠΈ Π΄Π° ΠΈΡΡΠ°ΠΊΠ½Π΅ΠΌΠΎ Π½Π΅ΠΊΠ΅ ΠΏΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΠΈ Π΄Π° ΡΠ°Π·ΠΌΠΎΡΡΠΈΠΌΠΎ Π½Π΅ΠΊΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎΠ³ ΠΏΡΠΈΡΡΡΠΏΠ°.
ΠΡΠ΅Π΄Π½ΠΎΡΡΠΈ
ΠΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠ±ΠΈΠ»Π½Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠ»Π΅ΡΠ½ΠΎΠ³ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ΠΎΠ³ ΡΠΈΡΡΠ΅ΠΌΠ°:
- Π‘ΡΠ°ΡΠΈΡΠΊΠ° ΠΏΡΠΎΠ²Π΅ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅. ΠΠ²ΠΎ Π΄Π°ΡΠ΅ Π²ΠΈΡΠΎΠΊ Π½ΠΈΠ²ΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠ°, Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΠΈΡΠΏΡΠ°Π²Π½Π° Ρ ΠΎΠ±Π·ΠΈΡΠΎΠΌ Π½Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅ΡΠ° ΡΠΈΠΏΠ°.
- ΠΠΎΠ³Π°Ρ ΡΠ΅Π·ΠΈΠΊ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅. ΠΠ±ΠΈΡΠ½ΠΎ ΡΡ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΈΡΡΡΠΏΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ Π½Π° Π½Π°ΡΠ²ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²Π΅ Π·Π°ΠΌΠ΅Π½Π΅.
ΠΠΎΡΠΈΡΡΠ΅ΡΠΈ Π‘ΡΠ°Π»Π° ΠΌΠΎΠΆΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΡΠΈΡΠΎΠΊ ΡΠΏΠ΅ΠΊΡΠ°Ρ ΡΠ΅Π·ΠΈΡΠΊΠΈΡ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° Π΄Π° Π±ΠΈ ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΠΏΠΎΠ±ΠΎΡΡΠ°Π»Π°. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ ΠΎΡΠΎΠ±ΠΈΠ½Π΅ Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π½Π΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ, ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ Π·Π° ΠΏΠΎΡΡΠ°Π²ΡΠ°ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΡΠΎΠ³ ΠΎΠΏΡΠ΅Π³Π°, Π½Π° ΠΊΠΎΡΠ΅ ΡΠ΅ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΏΠΎΠ·ΠΈΠ²Π°ΡΠΈvalΡ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ ΡΠ°ΠΌΠΎ ΡΠ΅Π΄Π½ΠΎΠΌ Ρ ΡΠΏΠΎΡΠ°ΡΡΠ΅ΠΌ ΠΎΠΏΡΠ΅Π³Ρ (ΠΠ Π). ΠΠΎΠ³ΡΡΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ Π»ΠΈΡΠ΅ΡΠ°Π»Π½Π΅ ΡΠ΅ΠΊΠ²Π΅Π½ΡΠ΅ ΠΈΠ»ΠΈ ΠΈΠ½ΡΡΠ°Π½ΡΠ΅ ΠΎΠ΄ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠ»Π°ΡΠ° (Seq,Map, ΠΡΠ΄). - ΠΠ‘Π. Π‘ΡΠ°Π»Π° ΠΈΠΌΠ° ΠΏΡΠΈΡΡΠΎΡΠ½Ρ ΠΏΠΎΠ΄ΡΡΠΊΡ Π·Π° ΠΠ‘Π ΠΏΠΈΡΡΠ΅. ΠΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΡΠ΅ ΡΠ΅ ΠΌΠΎΠ³Ρ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ Π·Π° ΡΡΠΏΠΎΡΡΠ°Π²ΡΠ°ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½ΠΎΠ³ ΡΠ΅Π·ΠΈΠΊΠ° ΠΊΠΎΡΠΈ ΡΠ΅ ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΈΡΠΈ ΠΈ ΠΏΡΠΈΠ»Π°Π³ΠΎΡΠ΅Π½ΠΈΡΠΈ ΠΊΡΠ°ΡΡΠ΅ΠΌ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΡ, ΡΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½Π°ΡΠ½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π±Π°ΡΠ΅ΠΌ ΡΠΈΡΡΠΈΠ²Π° ΠΎΠ΄ ΡΡΡΠ°Π½Π΅ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠ° Π΄ΠΎΠΌΠ΅Π½Π°.
- ΠΠ½ΡΠ΅Π³ΡΠΈΡΠ΅Ρ ΠΈ ΠΊΠΎΡ Π΅ΡΠ΅Π½ΡΠ½ΠΎΡΡ ΠΌΠ΅ΡΡ ΡΠ²ΠΎΡΠΎΠ²ΠΈΠΌΠ°. ΠΠ΅Π΄Π½Π° ΠΎΠ΄ ΠΏΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΠΏΠΎΡΠ΅Π΄ΠΎΠ²Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ Π·Π° ΡΠ΅ΠΎ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌ Π½Π° ΡΠ΅Π΄Π½ΠΎΠΌ ΠΌΠ΅ΡΡΡ ΡΠ΅ Π΄Π° ΡΠ΅ ΡΠ²Π΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π΄Π΅ΡΠΈΠ½ΠΈΡΡ ΡΡΡΠΈΠΊΡΠ½ΠΎ ΡΠ΅Π΄Π½ΠΎΠΌ, Π° Π·Π°ΡΠΈΠΌ ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ Π½Π° ΡΠ²ΠΈΠΌ ΠΌΠ΅ΡΡΠΈΠΌΠ° Π³Π΄Π΅ ΡΡ Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±Π½Π΅. Π’Π°ΠΊΠΎΡΠ΅ ΡΠ½Π΅ΡΠΈΡΠ΅ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡΠ΅ Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΠ³ ΠΏΠΎΡΡΠ° Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅ Π΄Π° ΡΠ΅ Ρ ΡΠ²ΠΈΠΌ ΠΌΠΎΠ³ΡΡΠΈΠΌ ΠΈΡΠΏΡΠ°Π²Π½ΠΈΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΠΌΠ° ΡΠ²ΠΎΡΠΎΠ²ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ° Π³ΠΎΠ²ΠΎΡΠΈΡΠΈ ΠΈΡΡΠΈ ΡΠ΅Π·ΠΈΠΊ. ΠΠΎΡΡΠΎΡΠ΅ Π΅ΠΊΡΠΏΠ»ΠΈΡΠΈΡΠ½Π΅ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ ΠΈΠ·ΠΌΠ΅ΡΡ ΡΠ²ΠΎΡΠΎΠ²Π° ΡΡΠΎ ΠΎΡΠ΅ΠΆΠ°Π²Π° Π·Π°Π±ΠΎΡΠ°Π²ΡΠ°ΡΠ΅ ΠΏΡΡΠΆΠ°ΡΠ° Π½Π΅ΠΊΠΈΡ ΡΡΠ»ΡΠ³Π°.
- ΠΠΈΡΠΎΠΊ ΠΊΠ²Π°Π»ΠΈΡΠ΅Ρ ΠΏΡΠΎΠΌΠ΅Π½Π°. Π£ΠΊΡΠΏΠ°Π½ ΠΏΡΠΈΡΡΡΠΏ ΠΏΡΠΎΠ»Π°ΡΠΊΠ° ΠΏΡΠΎΠΌΠ΅Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΠΊΡΠΎΠ· Π½ΠΎΡΠΌΠ°Π»Π°Π½ ΠΠ ΠΏΡΠΎΡΠ΅Ρ ΡΡΠΏΠΎΡΡΠ°Π²ΡΠ° Π²ΠΈΡΠΎΠΊΠ΅ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π΅ ΠΊΠ²Π°Π»ΠΈΡΠ΅ΡΠ° ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΈ.
- ΠΡΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅. ΠΠ°Π΄ Π³ΠΎΠ΄ ΠΈΠ·Π²ΡΡΠΈΠΌΠΎ Π±ΠΈΠ»ΠΎ ΠΊΠ°ΠΊΠ²Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΈ, Π°ΡΡΠΎΠΌΠ°ΡΡΠΊΠ° ΠΏΡΠΈΠΌΠ΅Π½Π° ΠΎΡΠΈΠ³ΡΡΠ°Π²Π° Π΄Π° ΡΠ΅ ΡΠ²ΠΈ ΡΠ²ΠΎΡΠΎΠ²ΠΈ Π°ΠΆΡΡΠΈΡΠ°ΡΡ.
- ΠΠΎΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²ΡΠ΅ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅. ΠΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π½Π΅ ΠΌΠΎΡΠ° Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ°Π²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ ΠΈ ΡΡΠΊΡΡΠ΅ Π½Π΅ΡΠ°ΡΠ½ΠΈΠΌ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈΠΌΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅. ΠΠ²ΠΎ ΠΏΠΎΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²ΡΡΡΠ΅ ΡΠ΅Π»ΠΎΠΊΡΠΏΠ½Ρ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ. (ΠΠ΅ΠΊΠΈ ΠΏΠΎΡΠ°ΡΡ ΡΠ»ΠΎΠΆΠ΅Π½ΠΎΡΡΠΈ ΡΠ΅ Ρ ΡΠ°ΠΌΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΈ, Π°Π»ΠΈ ΡΠΎ ΡΠ΅ ΡΠ²Π΅ΡΡΠ°Π½ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡ ΠΊΠ° Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΡΠΈ.) ΠΡΠΈΠ»ΠΈΡΠ½ΠΎ ΡΠ΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ Π²ΡΠ°ΡΠΈΡΠΈ ΡΠ΅ Π½Π° ΡΠΎΠ±ΠΈΡΠ°ΡΠ΅Π½Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ β ΡΠ°ΠΌΠΎ Π΄ΠΎΠ΄Π°ΡΡΠ΅ Π΄Π΅Π»ΠΎΠ²Π΅ ΠΊΠΎΡΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡ. ΠΠ°ΠΊΡΠ΅ ΡΠ΅ Π·Π°ΠΏΠΎΡΠ΅ΡΠΈ ΡΠ° ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΎΠΌ ΠΈ ΠΎΠ΄Π»ΠΎΠΆΠΈΡΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ Π΄ΠΎΠ΄Π°ΡΠ½ΠΈΡ Π΄Π΅Π»ΠΎΠ²Π° Π·Π° Π½Π΅ΠΊΠ° ΠΊΠ°ΡΠ½ΠΈΡΠ° Π²ΡΠ΅ΠΌΠ΅Π½Π°.
- ΠΠ΅ΡΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°. ΠΠ±ΠΎΠ³ ΡΠΈΡΠ΅Π½ΠΈΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΠΏΡΠ°ΡΠ΅ ΠΈΡΡΠΈ ΠΏΡΠΎΡΠ΅Ρ ΡΠ°Π·Π²ΠΎΡΠ°, ΠΊΠ°ΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π΄ΠΎΠ±ΠΈΡΠ°ΠΌΠΎ Π°ΡΡΠ΅ΡΠ°ΠΊΡ ΡΠ° ΡΠ΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΎΠΌ Π²Π΅ΡΠ·ΠΈΡΠΎΠΌ. ΠΠΌΠΎΠ³ΡΡΠ°Π²Π° Π½Π°ΠΌ Π΄Π° Π²ΡΠ°ΡΠΈΠΌΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ Π°ΠΊΠΎ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ. ΠΠΎΠΆΠ΅ΠΌΠΎ ΡΠ°ΠΊ Π΄Π° ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ ΠΊΠΎΡΠ° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅Π½Π° ΠΏΡΠ΅ Π³ΠΎΠ΄ΠΈΠ½Ρ Π΄Π°Π½Π° ΠΈ ΠΎΠ½Π° ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°ΡΠΈ Π½Π° ΠΏΠΎΡΠΏΡΠ½ΠΎ ΠΈΡΡΠΈ Π½Π°ΡΠΈΠ½. Π‘ΡΠ°Π±ΠΈΠ»Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΠΏΠΎΠ±ΠΎΡΡΠ°Π²Π° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ΡΠΈΠ²ΠΎΡΡ ΠΈ ΠΏΠΎΡΠ·Π΄Π°Π½ΠΎΡΡ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ΠΎΠ³ ΡΠΈΡΡΠ΅ΠΌΠ°. ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΡΠ΅ ΡΠΈΠΊΡΠΈΡΠ°Π½Π° Ρ Π²ΡΠ΅ΠΌΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°ΡΠ° ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ ΡΠ΅ Π»Π°ΠΊΠΎ ΠΌΠ΅ΡΠ°ΡΠΈ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ ΡΠΈΡΡΠ΅ΠΌΡ.
- ΠΠΎΠ΄ΡΠ»Π°ΡΠ½ΠΎΡΡ. ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈ ΠΎΠΊΠ²ΠΈΡ ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»Π°ΡΠ°Π½ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΡΠ΅ ΠΌΠΎΠ³Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΎΠ²Π°ΡΠΈ Π½Π° ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ Π½Π°ΡΠΈΠ½Π΅
ΠΏΠΎΠ΄ΡΠΆΠ°Π²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ (ΠΏΠΎΡΡΠ°Π²ΠΊΠ΅/ΠΈΠ·Π³Π»Π΅Π΄ΠΈ). ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ, ΠΌΠΎΠ³ΡΡΠ΅ ΡΠ΅ ΠΈΠΌΠ°ΡΠΈ ΠΌΠ°Π»ΠΈ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ ΡΠ΅Π΄Π½ΠΎΠ³ ΡΠ²ΠΎΡΠ° ΠΈ ΠΏΠΎΡΡΠ°Π²ΠΊΡ Π²ΠΈΡΠ΅ ΡΠ²ΠΎΡΠΎΠ²Π° Π²Π΅Π»ΠΈΠΊΠΎΠ³ ΠΎΠ±ΠΈΠΌΠ°. Π Π°Π·ΡΠΌΠ½ΠΎ ΡΠ΅ ΠΈΠΌΠ°ΡΠΈ Π²ΠΈΡΠ΅ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΠ΅. - Π’Π΅ΡΡΠΈΡΠ°ΡΠ΅. ΠΠ° ΠΏΠΎΡΡΠ΅Π±Π΅ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ ΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°ΡΠΈ Π»Π°ΠΆΠ½Π° ΡΡΠ»ΡΠ³Π° ΠΈ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΡΠ΅ ΠΊΠ°ΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ Π½Π° Π±Π΅Π·Π±Π΅Π΄Π°Π½ Π½Π°ΡΠΈΠ½. ΠΠ΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΡΠ°Π·Π»ΠΈΡΠΈΡΠΈΡ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄Π° ΡΠ΅ΡΡΠΈΡΠ°ΡΠ° ΡΠ° ΡΠ°Π·Π»ΠΈΡΠΈΡΠΈΠΌ Π΄Π΅Π»ΠΎΠ²ΠΈΠΌΠ° Π·Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠΌ Π»Π°ΠΆΠ½ΠΈΠΌ ΠΌΠΎΠΆΠ΅ ΡΠ΅ ΠΎΠ΄ΡΠΆΠ°Π²Π°ΡΠΈ ΠΈΡΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΎ.
- ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½ΠΎ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅. ΠΠΎΠ½Π΅ΠΊΠ°Π΄ ΡΠ΅ Ρ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ΠΈΠΌ ΡΠΈΡΡΠ΅ΠΌΠΈΠΌΠ° ΡΠ΅ΡΠΊΠΎ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΡΠΊΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅. ΠΠΎΡΠΈΡΡΠ΅ΡΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈ ΠΏΡΠΈΡΡΡΠΏ Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΈ ΠΊΠΎΠΌΠΏΠ»Π΅ΡΠ½ΠΎΠ³ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ΠΎΠ³ ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠΈ ΡΠ²Π΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½Π΅ Π΄Π΅Π»ΠΎΠ²Π΅ Π½Π° ΡΠ΅Π΄Π½ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΡ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π½ Π½Π°ΡΠΈΠ½. ΠΠ°ΠΊΠΎ ΡΠ΅ ΠΎΠΏΠΎΠ½Π°ΡΠ°ΡΠΈ ΡΠΈΡΡΠ°ΡΠΈΡΡ
ΠΊΠ°Π΄Π° ΡΠ΅Π΄Π½Π° ΠΎΠ΄ ΡΡΠ»ΡΠ³Π° ΠΏΠΎΡΡΠ°Π½Π΅ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Π°.
ΠΠ°Π½Π΅
ΠΡΠΈΡΡΡΠΏ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°Π½Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΠΊΡΡΠ΅ ΠΎΠ΄ βΠ½ΠΎΡΠΌΠ°Π»Π½Π΅β ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΠΈ ΠΌΠΎΠΆΠ΄Π° Π½Π΅ΡΠ΅ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°ΡΠΈ ΡΠ²ΠΈΠΌ ΠΏΠΎΡΡΠ΅Π±Π°ΠΌΠ°. ΠΠ²ΠΎ Π½Π΅ΠΊΠΈΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠ°ΠΊΠ° ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°Π½Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅:
- Π‘ΡΠ°ΡΠΈΡΠΊΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°. ΠΠΎΠΆΠ΄Π° Π½ΠΈΡΠ΅ ΠΏΠΎΠ³ΠΎΠ΄Π°Π½ Π·Π° ΡΠ²Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅. Π£ Π½Π΅ΠΊΠΈΠΌ ΡΠ»ΡΡΠ°ΡΠ΅Π²ΠΈΠΌΠ° ΠΏΠΎΡΡΠΎΡΠΈ ΠΏΠΎΡΡΠ΅Π±Π° Π·Π° Π±ΡΠ·ΠΈΠΌ ΡΠΈΠΊΡΠΈΡΠ°ΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΠΈ Π·Π°ΠΎΠ±ΠΈΠ»Π°Π·Π΅ΡΠΈ ΡΠ²Π΅ ΡΠΈΠ³ΡΡΠ½ΠΎΡΠ½Π΅ ΠΌΠ΅ΡΠ΅. ΠΠ²Π°Ρ ΠΏΡΠΈΡΡΡΠΏ ΠΎΡΠ΅ΠΆΠ°Π²Π°. ΠΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΠ° ΠΈ ΠΏΠΎΠ½ΠΎΠ²Π½ΠΎ ΡΠ°ΡΠΏΠΎΡΠ΅ΡΠΈΠ²Π°ΡΠ΅ ΡΡ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π½Π°ΠΊΠΎΠ½ Π±ΠΈΠ»ΠΎ ΠΊΠ°ΠΊΠ²Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΈ. ΠΠ²ΠΎ ΡΠ΅ ΠΈ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° ΠΈ ΡΠ΅ΡΠ΅Ρ.
- ΠΠ΅Π½Π΅ΡΠΈΡΠ°ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅. ΠΠ°Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ Π³Π΅Π½Π΅ΡΠΈΡΠ΅ Π½Π΅ΠΊΠΈ Π°Π»Π°Ρ Π·Π° Π°ΡΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡΡ, ΠΎΠ²Π°Ρ ΠΏΡΠΈΡΡΡΠΏ Π·Π°Ρ ΡΠ΅Π²Π° Π½Π°ΠΊΠ½Π°Π΄Π½Ρ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡ (ΠΊΠΎΡΠ° Π±ΠΈ Π·Π°ΡΠ·Π²ΡΠ°Ρ ΠΌΠΎΠ³Π»Π° Π΄Π° Π½Π΅ ΡΡΠΏΠ΅). ΠΠΎΠΆΠ΄Π° ΡΠ΅ Π±ΠΈΡΠΈ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π΄ΠΎΠ΄Π°ΡΠ½ΠΈ Π½Π°ΠΏΠΎΡΠΈ Π΄Π° ΡΠ΅ ΠΎΠ²Π°Ρ Π΄ΠΎΠ΄Π°ΡΠ½ΠΈ ΠΊΠΎΡΠ°ΠΊ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ΅ Ρ ΡΠΈΡΡΠ΅ΠΌ ΠΈΠ·Π³ΡΠ°Π΄ΡΠ΅.
- ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ. ΠΠ°Π½Π°Ρ ΡΠ΅ Ρ ΡΠΏΠΎΡΡΠ΅Π±ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π°Π»Π°ΡΠ° ΠΊΠΎΡΠΈ ΡΠ΅ ΠΎΡΠ»Π°ΡΠ°ΡΡ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ Π·Π°ΡΠ½ΠΎΠ²Π°Π½Π΅ Π½Π° ΡΠ΅ΠΊΡΡΡ. ΠΠ΅ΠΊΠΈ ΠΎΠ΄ ΡΠΈΡ
Π½Π΅ΡΠ΅ Π±ΠΈΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠΈΠ²ΠΎ ΠΊΠ°Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°. - ΠΠΎΡΡΠ΅Π±Π½Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π° Ρ Π½Π°ΡΠΈΠ½Ρ ΡΠ°Π·ΠΌΠΈΡΡΠ°ΡΠ°. ΠΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈ ΠΈ ΠΠ΅Π²ΠΠΏΡ ΡΡ ΡΠΏΠΎΠ·Π½Π°ΡΠΈ ΡΠ° ΡΠ΅ΠΊΡΡΡΠ°Π»Π½ΠΈΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½ΠΈΠΌ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΠΌΠ°. ΠΠ΄Π΅ΡΠ° ΠΎ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΠΌΠΎΠ³Π»Π° Π±ΠΈ ΠΈΠΌ ΠΈΠ·Π³Π»Π΅Π΄Π°ΡΠΈ ΡΡΠ΄Π½Π°.
- ΠΡΠ΅ ΡΠ²ΠΎΡΠ΅ΡΠ° ΠΊΠΎΠΌΠΏΠ°ΡΠ±ΠΈΠ»Π½Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π°Π½ ΡΠ΅ ΠΏΡΠΎΡΠ΅Ρ ΡΠ°Π·Π²ΠΎΡΠ° ΡΠΎΡΡΠ²Π΅ΡΠ° Π²ΠΈΡΠΎΠΊΠΎΠ³ ΠΊΠ²Π°Π»ΠΈΡΠ΅ΡΠ°.
ΠΠΎΡΡΠΎΡΠ΅ Π½Π΅ΠΊΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅ΡΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½ΠΎΠ³ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
- ΠΠΊΠΎ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΠΌΠΎ Π΄ΠΎΠ΄Π°ΡΠ½Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ ΠΊΠΎΡΡ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° ΡΠ²ΠΎΡΠ° Π½Π΅ Π·Π°Ρ
ΡΠ΅Π²Π°, ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅Ρ Π½Π°ΠΌ Π½Π΅ΡΠ΅ ΠΏΠΎΠΌΠΎΡΠΈ Π΄Π° ΠΎΡΠΊΡΠΈΡΠ΅ΠΌΠΎ ΠΎΠ΄ΡΡΡΡΠ²ΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅. ΠΠ²ΠΎ Π±ΠΈ ΡΠ΅ ΠΌΠΎΠ³Π»ΠΎ ΡΠ΅ΡΠΈΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΠΌ
HListΠΈΠ»ΠΈ ΠΠΠ’ (ΠΊΠ»Π°ΡΠ΅ ΡΠ»ΡΡΠ°ΡΠ΅Π²Π°) Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ ΡΠ²ΠΎΡΠ° ΡΠΌΠ΅ΡΡΠΎ ΠΎΡΠΎΠ±ΠΈΠ½Π° ΠΈ ΡΠ·ΠΎΡΠΊΠ° ΠΊΠΎΠ»Π°ΡΠ°. - ΠΠΎΡΠ°ΠΌΠΎ Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΠΌΠΎ Π½Π΅ΠΊΠΈ ΡΠ°Π±Π»ΠΎΠ½ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½ΠΎΡ Π΄Π°ΡΠΎΡΠ΅ΡΠΈ: (
package,import,objectΠ΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡΠ΅;
override def'Ρ Π·Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ ΠΊΠΎΡΠΈ ΠΈΠΌΠ°ΡΡ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π½Π΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ). ΠΠ²ΠΎ ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π΅Π»ΠΈΠΌΠΈΡΠ½ΠΎ ΡΠ΅ΡΠΈΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΠΌ ΠΠ‘Π-Π°. - Π£ ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡΡΡ Π½Π΅ ΠΏΠΎΠΊΡΠΈΠ²Π°ΠΌΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠΊΡ ΡΠ΅ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΡΠ»ΠΈΡΠ½ΠΈΡ ΡΠ²ΠΎΡΠΎΠ²Π°.
ΠΠ°ΠΊΡΡΡΠ°ΠΊ
Π£ ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡΡΡ ΡΠΌΠΎ ΡΠ°Π·Π³ΠΎΠ²Π°ΡΠ°Π»ΠΈ ΠΎ ΠΈΠ΄Π΅ΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Ρ ΠΈΠ·Π²ΠΎΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Ρ Π½Π° Π±Π΅Π·Π±Π΅Π΄Π°Π½ Π½Π°ΡΠΈΠ½. ΠΡΠΈΡΡΡΠΏ Π±ΠΈ ΡΠ΅ ΠΌΠΎΠ³Π°ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ Ρ ΠΌΠ½ΠΎΠ³ΠΈΠΌ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΠΌΠ° ΠΊΠ°ΠΎ Π·Π°ΠΌΠ΅Π½Π° Π·Π° ΠΊΠΌΠ» ΠΈ Π΄ΡΡΠ³Π΅ ΡΠ΅ΠΊΡΡΡΠ°Π»Π½Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅. Π£ΠΏΡΠΊΠΎΡ ΡΠΎΠΌΠ΅ ΡΡΠΎ ΡΠ΅ Π½Π°Ρ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½ Ρ Π‘ΡΠ°Π»Π°-Ρ, ΠΌΠΎΠ³Π°ΠΎ Π±ΠΈ ΡΠ΅ ΠΏΡΠ΅Π²Π΅ΡΡΠΈ ΠΈ Π½Π° Π΄ΡΡΠ³Π΅ ΠΊΠΎΠΌΠΏΠ°ΡΠ±ΠΈΠ»Π½Π΅ ΡΠ΅Π·ΠΈΠΊΠ΅ (ΠΊΠ°ΠΎ ΡΡΠΎ ΡΡ ΠΠΎΡΠ»ΠΈΠ½, Π¦#, Π‘Π²ΠΈΡΡ, ΠΈΡΠ΄.). ΠΠ²Π°Ρ ΠΏΡΠΈΡΡΡΠΏ Π±ΠΈ ΡΠ΅ ΠΌΠΎΠ³Π°ΠΎ ΠΈΡΠΏΡΠΎΠ±Π°ΡΠΈ Ρ Π½ΠΎΠ²ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΠΊΡΡ ΠΈ, Ρ ΡΠ»ΡΡΠ°ΡΡ Π΄Π° ΡΠ΅ Π½Π΅ ΡΠΊΠ»Π°ΠΏΠ° Π΄ΠΎΠ±ΡΠΎ, ΠΏΡΠ΅ΡΠΈ Π½Π° ΡΡΠ°ΡΠΈ Π½Π°ΡΠΈΠ½.
ΠΠ°ΡΠ°Π²Π½ΠΎ, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΠ±ΠΈΠ»Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π·Π°Ρ ΡΠ΅Π²Π° Π²ΠΈΡΠΎΠΊ ΠΊΠ²Π°Π»ΠΈΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΠ° ΡΠ°Π·Π²ΠΎΡΠ°. ΠΠ°ΡΠ·Π²ΡΠ°Ρ, ΠΎΠ±Π΅ΡΠ°Π²Π° Π΄Π° ΡΠ΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΡΠΈ ΡΠ΅Π΄Π½Π°ΠΊΠΎ ΠΊΠ²Π°Π»ΠΈΡΠ΅ΡΠ½Ρ ΡΠΎΠ±ΡΡΠ½Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ.
ΠΠ²Π°Ρ ΠΏΡΠΈΡΡΡΠΏ ΡΠ΅ ΠΌΠΎΠΆΠ΅ ΠΏΡΠΎΡΠΈΡΠΈΡΠΈ Π½Π° ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ Π½Π°ΡΠΈΠ½Π΅:
- ΠΠΎΠ³Π»ΠΈ Π±ΠΈ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΠΌΠ°ΠΊΡΠΎΠΈ Π΄Π° Π±ΠΈ ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈΠ»Π° Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΠΈ Π΄Π° Π½Π΅ ΡΡΠΏΠ΅ Ρ Π²ΡΠ΅ΠΌΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°ΡΠ° Ρ ΡΠ»ΡΡΠ°ΡΡ Π½Π΅ΡΡΠΏΠ΅Ρ Π° Π±ΠΈΠ»ΠΎ ΠΊΠ°ΠΊΠ²ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅ΡΠ° ΠΏΠΎΡΠ»ΠΎΠ²Π½Π΅ Π»ΠΎΠ³ΠΈΠΊΠ΅.
- ΠΠ‘Π Π±ΠΈ ΡΠ΅ ΠΌΠΎΠ³Π°ΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°ΡΠΈ Π΄Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ Π½Π° Π½Π°ΡΠΈΠ½ ΠΏΡΠΈΠ»Π°Π³ΠΎΡΠ΅Π½ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΡ Π΄ΠΎΠΌΠ΅Π½Π°.
- ΠΠΈΠ½Π°ΠΌΠΈΡΠΊΠΎ ΡΠΏΡΠ°Π²ΡΠ°ΡΠ΅ ΡΠ΅ΡΡΡΡΠΈΠΌΠ° ΡΠ° Π°ΡΡΠΎΠΌΠ°ΡΡΠΊΠΈΠΌ ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠΈΠΌΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°Π΄Π° ΠΏΡΠΈΠ»Π°Π³ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡΠΎΡ ΡΠ²ΠΎΡΠΎΠ²Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠ°, ΠΌΠΎΠΆΠ΄Π° Π±ΠΈΡΠΌΠΎ ΠΆΠ΅Π»Π΅Π»ΠΈ (1) Π΄Π° ΡΠ²ΠΎΡΠΎΠ²ΠΈ Π΄ΠΎΠ±ΠΈΡΡ ΠΌΠ°Π»ΠΎ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ; (2) ΠΌΠ΅Π½Π°ΡΠ΅Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π·Π° ΠΏΡΠΈΠΌΠ°ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ° ΠΎ Π½ΠΎΠ²ΠΈΠΌ ΡΠ²ΠΎΡΠΎΠ²ΠΈΠΌΠ°.
Ρ Π²Π°Π»Π°
ΠΠ΅Π»Π΅ΠΎ Π±ΠΈΡ Π΄Π° ΡΠ΅ Π·Π°Ρ Π²Π°Π»ΠΈΠΌ ΠΠ½Π΄ΡΠ΅ΡΡ Π‘Π°ΠΊΡΠΎΠ½ΠΎΠ²Ρ, ΠΠ°Π²Π»Ρ ΠΠΎΠΏΠΎΠ²Ρ, ΠΠ½ΡΠΎΠ½Ρ ΠΠ΅Ρ Π°ΡΠ΅Π²Ρ ΡΡΠΎ ΡΡ Π΄Π°Π»ΠΈ ΠΈΠ½ΡΠΏΠΈΡΠ°ΡΠΈΠ²Π½Π΅ ΠΏΠΎΠ²ΡΠ°ΡΠ½Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ΅ ΠΎ Π½Π°ΡΡΡΡ ΠΎΠ²ΠΎΠ³ ΠΏΠΎΡΡΠ° ΠΊΠΎΡΠ΅ ΡΡ ΠΌΠΈ ΠΏΠΎΠΌΠΎΠ³Π»Π΅ Π΄Π° ΡΠΎ Π±ΡΠ΄Π΅ ΡΠ°ΡΠ½ΠΈΡΠ΅.
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ Π°Π±Ρ.ΡΠΎΠΌ
