Single responsibility principle, ΠΎΠ½ ΠΆΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ,
ΠΎΠ½ ΠΆΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΈΠ·ΠΌΠ΅Π½ΡΠΈΠ²ΠΎΡΡΠΈ β ΠΊΡΠ°ΠΉΠ½Π΅ ΡΠΊΠΎΠ»ΡΠ·ΠΊΠΈΠΉ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΏΠ°ΡΠ΅Π½Ρ ΠΈ ΡΡΠΎΠ»Ρ Π½Π΅ΡΠ²ΠΎΠ·Π½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ Π½Π° ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°.
ΠΠ΅ΡΠ²ΠΎΠ΅ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²ΠΎ Ρ ΡΡΠΈΠΌ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠΌ ΡΠΎΡΡΠΎΡΠ»ΠΎΡΡ Π΄Π»Ρ ΠΌΠ΅Π½Ρ Π² Π½Π°ΡΠ°Π»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΡΡΡΠ°, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠ»ΠΎΠ΄ΡΡ ΠΈ Π·Π΅Π»Π΅Π½ΡΡ Π½Π°Ρ Π²ΡΠ²Π΅Π·Π»ΠΈ Π² Π»Π΅Ρ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΠ· Π»ΠΈΡΠΈΠ½ΠΎΠΊ ΡΡΡΠ΄Π΅Π½ΡΠΎΠ² β ΡΡΡΠ΄Π΅Π½ΡΠΎΠ² Π½Π°ΡΡΠΎΡΡΠΈΡ .
Π Π»Π΅ΡΡ Π½Π°Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΠ»ΠΈ Π½Π° Π³ΡΡΠΏΠΏΡ ΠΏΠΎ 8-9 ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈ ΡΡΡΡΠΎΠΈΠ»ΠΈ ΡΠΎΡΠ΅Π²Π½ΠΎΠ²Π°Π½ΠΈΠ΅ β ΠΊΠ°ΠΊΠ°Ρ Π³ΡΡΠΏΠΏΠ° Π±ΡΡΡΡΠ΅Π΅ Π²ΡΠΏΡΠ΅Ρ Π±ΡΡΡΠ»ΠΊΡ Π²ΠΎΠ΄ΠΊΠΈ ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ, ΡΡΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ ΠΈΠ· Π³ΡΡΠΏΠΏΡ Π½Π°Π»ΠΈΠ²Π°Π΅Ρ Π²ΠΎΠ΄ΠΊΡ Π² ΡΡΠ°ΠΊΠ°Π½, Π²ΡΠΎΡΠΎΠΉ Π²ΡΠΏΠΈΠ²Π°Π΅Ρ, Π° ΡΡΠ΅ΡΠΈΠΉ Π·Π°ΠΊΡΡΡΠ²Π°Π΅Ρ. ΠΡΠΏΠΎΠ»Π½ΠΈΠ²ΡΠΈΠΉ ΡΠ²ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠ½ΠΈΡ Π²ΡΡΠ°Π΅Ρ Π² ΠΊΠΎΠ½Π΅Ρ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π³ΡΡΠΏΠΏΡ.
Π‘Π»ΡΡΠ°ΠΉ, ΠΊΠΎΠ³Π΄Π° ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π±ΡΠ» ΠΊΡΠ°ΡΠ΅Π½ ΡΡΠ΅ΠΌ, ΠΈ ΡΠ²Π»ΡΠ»ΡΡ Ρ ΠΎΡΠΎΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ SRP.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ 1. ΠΠ΄ΠΈΠ½Π°Ρ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ.
ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ (SRP) Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π΅ΡΡΡ ΡΠ²ΠΎΡ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ ΠΈ ΠΏΡΠΈΡΠΈΠ½Π° ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΡΠ° ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ Ρ Π½Π΅Π³ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π°.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ «ΠΡΠΏΠΈΠ²ΠΎΡ
Π°» (Tippler).
ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° SRP ΡΠ°Π·Π΄Π΅Π»ΠΈΠΌ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ Π½Π° ΡΡΠΎΠΈΡ
:
- ΠΠ΄ΠΈΠ½ Π½Π°Π»ΠΈΠ²Π°Π΅Ρ (PourOperation)
- ΠΠ΄ΠΈΠ½ Π²ΡΠΏΠΈΠ²Π°Π΅Ρ (DrinkUpOperation)
- ΠΠ΄ΠΈΠ½ Π·Π°ΠΊΡΡΡΠ²Π°Π΅Ρ (TakeBiteOperation)
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π΅Π½ Π·Π° ΠΎΠ΄Π½Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΡΠΎ Π΅ΡΡΡ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ΄Π½Ρ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΡ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ β Π²ΡΠΏΠΈΡΡ, Π½Π°Π»ΠΈΡΡ ΠΈΠ»ΠΈ Π·Π°ΠΊΡΡΠΈΡΡ.
ΠΡΠΏΠΈΠ²ΠΎΡ Π° ΠΆΠ΅, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΠ°Π΄ΠΎΠΌ Π΄Π»Ρ Π΄Π°Π½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ:
Ρlass Tippler {
//...
void Act(){
_pourOperation.Do() // Π½Π°Π»ΠΈΡΡ
_drinkUpOperation.Do() // Π²ΡΠΏΠΈΡΡ
_takeBiteOperation.Do() // Π·Π°ΠΊΡΡΠΈΡΡ
}
}
ΠΠ°ΡΠ΅ΠΌ?
Π§Π΅Π»ΠΎΠ²Π΅ΠΊ-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΏΠΈΡΠ΅Ρ ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°-ΠΎΠ±Π΅Π·ΡΡΠ½Ρ, Π° ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ-ΠΎΠ±Π΅Π·ΡΡΠ½Π° Π½Π΅Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»Π΅Π½, Π³Π»ΡΠΏ ΠΈ Π²Π΅ΡΠ½ΠΎ ΠΊΡΠ΄Π°-ΡΠΎ ΡΠΏΠ΅ΡΠΈΡ. ΠΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΈ ΠΏΠΎΠ½ΡΡΡ ΠΎΠΊΠΎΠ»ΠΎ 3 β 7 ΡΠ΅ΡΠΌΠΎΠ² Π² ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
Π ΡΠ»ΡΡΠ°Π΅ Π²ΡΠΏΠΈΠ²ΠΎΡ
ΠΈ ΡΡΠΈΡ
ΡΠ΅ΡΠΌΠΎΠ² ΡΡΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΊΠΎΠ΄ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΡΡΡΠ½Π΅ΠΉ, ΡΠΎ Π² Π½Π΅ΠΌ ΠΏΠΎΡΠ²ΡΡΡΡ ΡΡΠΊΠΈ, ΡΡΠ°ΠΊΠ°Π½Ρ, ΠΌΠΎΡΠ΄ΠΎΠ±ΠΎΠΈ ΠΈ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ ΡΠΏΠΎΡΡ ΠΎ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ΅. Π Π²ΡΠ΅ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π² ΡΠ΅Π»Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°. Π£Π²Π΅ΡΠ΅Π½ β Π²Ρ Π²ΠΈΠ΄Π΅Π»ΠΈ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π² ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅. ΠΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π³ΡΠΌΠ°Π½Π½ΠΎΠ΅ ΠΈΡΠΏΡΡΠ°Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΡΠΈΡ
ΠΈΠΊΠΈ.
Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ-ΠΎΠ±Π΅Π·ΡΡΠ½Π° Π·Π°ΡΠΎΡΠ΅Π½ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡΠ° Π² ΡΠ²ΠΎΠ΅ΠΉ Π³ΠΎΠ»ΠΎΠ²Π΅. Π ΡΠ²ΠΎΠ΅ΠΌ Π²ΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡ ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡ, ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΈΠ· Π½ΠΈΡ Π½ΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡ. ΠΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅ ΡΠ΅Π±Π΅ ΡΡΠ°ΡΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΌΠ°ΡΠΈΠ½Ρ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π² Π²ΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ ΠΎΡΠΊΡΡΡΡ Π΄Π²Π΅ΡΡ, ΠΎΡΠΊΡΡΡΠΈΡΡ ΠΎΠ±ΡΠΈΠ²ΠΊΡ Π΄Π²Π΅ΡΠΈ ΠΈ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠ°ΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ ΡΡΠ΅ΠΊΠ»ΠΎΠΏΠΎΠ΄ΡΠ΅ΠΌΠ½ΠΈΠΊΠΎΠ², Π²Π½ΡΡΡΠΈ ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ΄ΡΡ ΡΠ΅ΡΡΠ΅ΡΠ½ΠΈ. ΠΠΎ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π²ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, Π² ΠΎΠ΄Π½ΠΎΠΌ «Π»ΠΈΡΡΠΈΠ½Π³Π΅». ΠΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ «ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ-ΠΎΠ±Π΅Π·ΡΡΠ½Π°» Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ.
ΠΠΎΡΡΠΎΠΌΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΈ-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ Π½Π° Π½Π°Π±ΠΎΡ ΠΌΠ΅Π½Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΠ΄Π½Π°ΠΊΠΎ, Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ: Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΡΠ°ΡΡΡ ΠΌΠ°ΡΠΈΠ½Π°Ρ β Π²ΠΎΠ·Π΄ΡΡ ΠΎΠ²ΠΎΠ΄ Π²ΡΡ ΠΎΠ΄ΠΈΡ Π² Π΄Π²Π΅ΡΡ, Π° Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ β ΡΠ±ΠΎΠΉ ΡΠ»Π΅ΠΊΡΡΠΎΠ½ΠΈΠΊΠΈ Π·Π°ΠΌΠΊΠ° Π½Π΅ Π΄Π°Π΅Ρ Π·Π°ΠΏΡΡΡΠΈΡΡΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ, ΡΡΠΎ Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠΈ ΡΠ΅ΠΌΠΎΠ½ΡΠ΅.
Π’Π°ΠΊ Π²ΠΎΡ, SRP β ΡΡΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ, ΠΎΠ±ΡΡΡΠ½ΡΡΡΠΈΠΉ ΠΠΠ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΎΠ²Π°ΡΡ, ΡΠΎ Π΅ΡΡΡ Π³Π΄Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ Π»ΠΈΠ½ΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ.
ΠΠ½ Π³ΠΎΠ²ΠΎΡΠΈΡ, ΡΡΠΎ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π½Π°Π΄ΠΎ ΠΏΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ «ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ», ΡΠΎ Π΅ΡΡΡ ΠΏΠΎ Π·Π°Π΄Π°ΡΠ°ΠΌ ΡΠ΅Ρ ΠΈΠ»ΠΈ ΠΈΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
ΠΠ΅ΡΠ½Π΅ΠΌΡΡ ΠΊ Π²ΡΠΏΠΈΠ²ΠΎΡ Π΅ ΠΈ ΠΏΠ»ΡΡΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ-ΠΎΠ±Π΅Π·ΡΡΠ½ΠΊΠ° ΠΏΡΠΈ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ:
- ΠΠΎΠ΄ ΡΡΠ°Π» ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎ ΡΡΠ΅Π½ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅
- ΠΠΎΠ΄ ΠΌΠΎΠ³ΡΡ ΠΏΠΈΡΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² ΡΡΠ°Π·Ρ (ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΈΡΠ΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ)
- Π£ΠΏΡΠΎΡΠ°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β ΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΡΠ΅ΠΌ Π»Π΅Π³ΡΠ΅ Π΅Π³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ
- ΠΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΠΎΡΡΡ ΠΊΠΎΠ΄Π° β ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ DrinkUpOperation Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΡΠΏΠΈΠ²ΠΎΡ Π° Π²ΡΠ»ΠΈΠ²Π°Π΅Ρ ΠΆΠΈΠ΄ΠΊΠΎΡΡΡ ΠΏΠΎΠ΄ ΡΡΠΎΠ». ΠΠ»ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π½Π°Π»ΠΈΠ²Π°Π½ΠΈΡ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π²Ρ ΠΌΠ΅ΡΠ°Π΅ΡΠ΅ Π²ΠΈΠ½ΠΎ ΠΈ Π²ΠΎΠ΄Ρ ΠΈΠ»ΠΈ Π²ΠΎΠ΄ΠΊΡ ΠΈ ΠΏΠΈΠ²ΠΎ. Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ Π±ΠΈΠ·Π½Π΅ΡΠ° Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ΅, ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ ΡΡΠΎΠ³Π°Ρ ΠΊΠΎΠ΄ ΠΌΠ΅ΡΠΎΠ΄Π° Tippler.Act.
- ΠΠ· ΡΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ»ΠΎΠΆΠΈΡΡ ΠΎΠ±ΠΆΠΎΡΡ ( ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΎΠ»ΡΠΊΠΎ TakeBitOperation), ΠΠ»ΠΊΠΎΠ³ΠΎΠ»ΠΈΠΊΠ° (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΎΠ»ΡΠΊΠΎ DrinkUpOperation Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΠ· Π±ΡΡΡΠ»ΠΊΠΈ) ΠΈ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠΈΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ Π±ΠΈΠ·Π½Π΅ΡΠ°.
(ΠΠΉ, ΠΊΠ°ΠΆΠ΅ΡΡΡ ΡΡΠΎ ΡΠΆΠ΅ OCP ΠΏΡΠΈΠ½ΡΠΈΠΏ, ΠΈ Ρ Π½Π°ΡΡΡΠΈΠ» ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ°)
Π, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, ΠΌΠΈΠ½ΡΡΡ:
- ΠΡΠΈΠ΄Π΅ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠΈΠΏΠΎΠ².
- ΠΡΠΏΠΈΠ²ΠΎΡ Π° Π²ΠΏΠ΅ΡΠ²ΡΠ΅ Π²ΡΠΏΡΠ΅Ρ Π½Π° ΠΏΠ°ΡΡ ΡΠ°ΡΠΎΠ² ΠΏΠΎΠ·ΠΆΠ΅, ΡΠ΅ΠΌ ΠΌΠΎΠ³ Π±Ρ
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ 2. ΠΠ΄ΠΈΠ½Π°Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΠΈΠ²ΠΎΡΡΡ.
ΠΠΎΠ·Π²ΠΎΠ»ΡΡΠ΅ Π³ΠΎΡΠΏΠΎΠ΄Π°! ΠΠ»Π°ΡΡ Π²ΡΠΏΠΈΠ²ΠΎΡ ΠΈ ΠΆΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π΅Π΄ΠΈΠ½ΡΡ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ β ΠΎΠ½ Π²ΡΠΏΠΈΠ²Π°Π΅Ρ! Π Π²ΠΎΠΎΠ±ΡΠ΅, ΡΠ»ΠΎΠ²ΠΎ «ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ» β ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΠΊΡΠ°ΠΉΠ½Π΅ ΡΠ°Π·ΠΌΡΡΠΎΠ΅. ΠΡΠΎ-ΡΠΎ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π΅Π½ Π·Π° ΡΡΠ΄ΡΠ±Ρ ΡΠ΅Π»ΠΎΠ²Π΅ΡΠ΅ΡΡΠ²Π°, Π° ΠΊΡΠΎ-ΡΠΎ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π΅Π½ Π·Π° ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΎΠΏΡΠΎΠΊΠΈΠ½ΡΡΡΡ Π½Π° ΠΏΠΎΠ»ΡΡΠ΅ ΠΏΠΈΠ½Π³Π²ΠΈΠ½ΠΎΠ².
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΄Π²Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠΏΠΈΠ²ΠΎΡ ΠΈ. ΠΠ΅ΡΠ²Π°Ρ, ΡΠΊΠ°Π·Π°Π½Π½Π°Ρ Π²ΡΡΠ΅, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π² ΡΠ΅Π±Π΅ ΡΡΠΈ ΠΊΠ»Π°ΡΡΠ° β Π½Π°Π»ΠΈΡΡ, Π²ΡΠΏΠΈΡΡ ΠΈ Π·Π°ΠΊΡΡΠΈΡΡ.
ΠΡΠΎΡΠ°Ρ, Π½Π°ΠΏΠΈΡΠ°Π½Π° ΡΠ΅ΡΠ΅Π· ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡ «ΠΠΏΠ΅ΡΠ΅Π΄ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΏΠ΅ΡΠ΅Π΄» ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ Act:
//ΠΠ΅ ΡΡΠ°ΡΡΡΠ΅ Π²ΡΠ΅ΠΌΡ Π½Π° ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. ΠΡΡΡΠ΅ ΡΡΠ΅ΡΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π½ΡΠΊΡ
Ρlass BrutTippler {
//...
void Act(){
// Π½Π°Π»ΠΈΠ²Π°Π΅ΠΌ
if(!_hand.TryDischarge(from:_bottle, to:_glass, size:_glass.Capacity))
throw new OverdrunkException();
// Π²ΡΠΏΠΈΠ²Π°Π΅ΠΌ
if(!_hand.TryDrink(from: _glass, size: _glass.Capacity))
throw new OverdrunkException();
//ΠΠ°ΠΊΡΡΡΠ²Π°Π΅ΠΌ
for(int i = 0; i< 3; i++){
var food = _foodStore.TakeOrDefault();
if(food==null)
throw new FoodIsOverException();
_hand.TryEat(food);
}
}
}
ΠΠ±Π° ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠ°, Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Ρ, Π²ΡΠ³Π»ΡΠ΄ΡΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΅Π΄ΠΈΠ½ΡΡ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ «Π²ΡΠΏΠΈΡΡ».
ΠΠΎΠ½ΡΡΠ·!
Π’ΠΎΠ³Π΄Π° ΠΌΡ Π»Π΅Π·Π΅ΠΌ Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΈ ΡΠ·Π½Π°Π΅ΠΌ Π΄ΡΡΠ³ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ SRP β ΠΡΠΈΠ½ΡΠΈΠΏ Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΈΠ·ΠΌΠ΅Π½ΡΠΈΠ²ΠΎΡΡΠΈ (Single Changeability Principle).
SCP Π³Π»Π°ΡΠΈΡ, ΡΡΠΎ «Π£ ΠΌΠΎΠ΄ΡΠ»Ρ Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ²ΠΎΠ΄ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ«. Π’ΠΎ Π΅ΡΡΡ «ΠΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ β ΡΡΠΎ ΠΏΠΎΠ²ΠΎΠ΄ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ».
(ΠΠΎΡ ΠΎΠΆΠ΅, ΡΠ΅Π±ΡΡΠ°, ΠΏΡΠΈΠ΄ΡΠΌΠ°Π²ΡΠΈΠ΅ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΈ ΡΠ²Π΅ΡΠ΅Π½Ρ Π² ΡΠ΅Π»Π΅ΠΏΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°-ΠΎΠ±Π΅Π·ΡΡΠ½Ρ)
Π’Π΅ΠΏΠ΅ΡΡ Π²ΡΠ΅ Π²ΡΡΠ°Π΅Ρ Π½Π° ΡΠ²ΠΎΠΈ ΠΌΠ΅ΡΡΠ°. ΠΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π½Π°Π»ΠΈΠ²Π°Π½ΠΈΡ, Π²ΡΠΏΠΈΠ²Π°Π½ΠΈΡ ΠΈ Π·Π°ΠΊΡΡΡΠ²Π°Π½ΠΈΡ, Π° Π² ΡΠ°ΠΌΠΎΠΌ Π²ΡΠΏΠΈΠ²ΠΎΡ Π΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈ ΡΠΎΡΡΠ°Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠ² Π·Π°ΠΊΡΡΠΊΡ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΡΠ°.
Π ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ «ΠΠΏΠ΅ΡΠ΅Π΄ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΏΠ΅ΡΠ΅Π΄», Π²ΡΠ΅ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ β ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ Act. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΈΡΠ°Π±Π΅Π»ΡΠ½ΠΎ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Π² ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° Π»ΠΎΠ³ΠΈΠΊΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ ΠΎΠ½Π° ΡΠ΅Π΄ΠΊΠΎ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, Π½ΠΎ Π·Π°ΡΠ°ΡΡΡΡ ΡΡΠΎ ΠΊΠΎΠ½ΡΠ°Π΅ΡΡΡ ΡΠΆΠ°ΡΠ½ΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΠΏΠΎ 500 ΡΡΡΠΎΠΊ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ, Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ if -ΠΎΠ² Π±ΠΎΠ»ΡΡΠΈΠΌ, ΡΠ΅ΠΌ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΡΡΠΏΠ»Π΅Π½ΠΈΡ Π ΠΎΡΡΠΈΠΈ Π² Π½Π°ΡΠΎ.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ 3. ΠΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
ΠΡΠΏΠΈΠ²ΠΎΡ ΠΈ ΡΠ°ΡΡΠΎ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΎΠ½ΠΈ ΠΏΡΠΎΡΠ½ΡΠ»ΠΈΡΡ Π² ΡΡΠΆΠΎΠΉ ΠΊΠ²Π°ΡΡΠΈΡΠ΅, ΠΈΠ»ΠΈ Π³Π΄Π΅ ΠΈΡ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΠΉ. ΠΡΠΈΡΠ»ΠΎ Π²ΡΠ΅ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ Π»ΠΎΠ³ΠΈΡΠΎΠ²ΠΊΡ.
ΠΠ°ΡΠ½Π΅ΠΌ Π»ΠΎΠ³ΠΈΡΠΎΠ²ΠΊΡ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π½Π°Π»ΠΈΠ²Π°Π½ΠΈΡ:
class PourOperation: IOperation{
PourOperation(ILogger log /*....*/){/*...*/}
//...
void Do(){
_log.Log($"Before pour with {_hand} and {_bottle}");
//Pour business logic ...
_log.Log($"After pour with {_hand} and {_bottle}");
}
}
ΠΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠΎΠ²Π°Π² Π΅Π΅ Π² PourOperation, ΠΌΡ ΠΏΠΎΡΡΡΠΏΠΈΠ»ΠΈ ΠΌΡΠ΄ΡΠΎ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ ΠΈ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΠΈ, Π½ΠΎ Π²ΠΎΡ Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΠΈΠ²ΠΎΡΡΠΈ Ρ Π½Π°Ρ ΡΠ΅ΠΏΠ΅ΡΡ ΠΊΠΎΠ½ΡΡΠ·. ΠΠΎΠΌΠΈΠΌΠΎ ΡΠ°ΠΌΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΌΠ΅Π½ΡΡΡΡΡ, ΠΈΠ·ΠΌΠ΅Π½ΡΠΈΠ²ΠΎΠΉ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΈ ΡΠ°ΠΌΠ° Π»ΠΎΠ³ΠΈΡΠΎΠ²ΠΊΠ°. ΠΡΠΈΠ΄Π΅ΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΈ Π΄Π΅Π»Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ Π»ΠΎΠ³ΠΈΡΠΎΠ²ΡΠΈΠΊ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π»ΠΈΠ²Π°Π½ΠΈΡ:
interface IPourLogger{
void LogBefore(IHand, IBottle){}
void LogAfter(IHand, IBottle){}
void OnError(IHand, IBottle, Exception){}
}
class PourOperation: IOperation{
PourOperation(IPourLogger log /*....*/){/*...*/}
//...
void Do(){
_log.LogBefore(_hand, _bottle);
try{
//... business logic
_log.LogAfter(_hand, _bottle");
}
catch(exception e){
_log.OnError(_hand, _bottle, e)
}
}
}
ΠΠΎΡΠΎΡΠ½ΡΠΉ ΡΠΈΡΠ°ΡΠ΅Π»Ρ Π·Π°ΠΌΠ΅ΡΠΈΡ, ΡΡΠΎ LogAfter, LogBefore ΠΈ OnError ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ ΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΈ ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠΌΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠΈ ΠΊΠ»Π°ΡΡΠ°: PourLoggerBefore, PourLoggerAfter ΠΈ PourErrorLogger.
Π Π²ΡΠΏΠΎΠΌΠ½ΠΈΠ², ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π΄Π»Ρ Π²ΡΠΏΠΈΠ²ΠΎΡ ΠΈ ΡΡΠΈ β ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π΄Π΅Π²ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π ΠΈΡΠΎΠ³Π΅ Π²Π΅ΡΡ Π²ΡΠΏΠΈΠ²ΠΎΡ Π° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· 14 (!!!) ΠΊΠ»Π°ΡΡΠΎΠ².
ΠΠΈΠΏΠ΅ΡΠ±ΠΎΠ»Π°? ΠΠ΄Π²Π° Π»ΠΈ! Π§Π΅Π»ΠΎΠ²Π΅ΠΊ-ΠΎΠ±Π΅Π·ΡΡΠ½ΠΊΠ° Ρ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΠΎΠΉ Π³ΡΠ°Π½Π°ΡΠΎΠΉ ΡΠ°Π·Π΄ΡΠΎΠ±ΠΈΡ βΠ½Π°Π»ΠΈΠ²Π°ΡΠ΅Π»Ρβ Π½Π° Π³ΡΠ°ΡΠΈΠ½, ΡΡΠ°ΠΊΠ°Π½, ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ Π½Π°Π»ΠΈΠ²Π°Π½ΠΈΡ, ΡΠ΅ΡΠ²ΠΈΡ ΠΏΠΎΠ΄Π°ΡΠΈ Π²ΠΎΠ΄Ρ, ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΌΠΎΠ»Π΅ΠΊΡΠ» ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠ²Π°ΡΡΠ°Π» Π±ΡΠ΄Π΅Ρ ΠΏΡΡΠ°ΡΡΡΡ ΡΠ°ΡΠΏΡΡΠ°ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π±Π΅Π· Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . Π ΠΏΠΎΠ²Π΅ΡΡΡΠ΅ β ΠΎΠ½ Π½Π΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ.
ΠΠΌΠ΅Π½Π½ΠΎ Π½Π° ΡΡΠΎΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡ ΠΊ Π²ΡΠ²ΠΎΠ΄Ρ, ΡΡΠΎ SRP β ΡΡΠΎ ΡΠΊΠ°Π·ΠΊΠΈ ΠΈΠ· ΡΠΎΠ·ΠΎΠ²ΡΡ ΠΊΠΎΡΠΎΠ»Π΅Π²ΡΡΠ², ΠΈ ΡΡ ΠΎΠ΄ΡΡ Π²ΠΈΡΡ Π»Π°ΠΏΡΡ…
β¦ ΡΠ°ΠΊ ΠΈ Π½Π΅ ΡΠ·Π½Π°Π² ΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ΅ΡΡΠ΅Π³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Srp:
«ΠΡΠΈΠ½ΡΠΈΠΏ Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ Π³Π»Π°ΡΠΈΡ, ΡΡΠΎ ΡΡ ΠΎΠΆΠΈΠ΅ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²Π΅ΡΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Ρ ΡΠ°Π½ΠΈΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅«. ΠΈΠ»ΠΈ βΠ’ΠΎ, ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π²ΠΌΠ΅ΡΡΠ΅, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅β
Π’ΠΎ Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ ΠΌΡ ΠΌΠ΅Π½ΡΠ΅ΠΌ Π»ΠΎΠ³ΠΈΡΠΎΠ²ΠΊΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΡΠΎ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΠΎ ΠΌΠ΅Π½ΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅.
ΠΡΠΎ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ β ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΡΠ΅ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΡ SRP, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ Π²ΡΡΠ΅, Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π½Π°Π΄ΠΎ Π΄ΡΠΎΠ±ΠΈΡΡ ΡΠΈΠΏΡ, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π΄ΡΠΎΠ±ΡΡΡΡ, ΡΠΎ Π΅ΡΡΡ Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π»ΠΎ «ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ²Π΅ΡΡ Ρ» Π½Π° ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π° ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΡΠΆΠ΅ ΠΈ ΠΎΠ± «ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΈ ΡΠ½ΠΈΠ·Ρ». ΠΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, SRP Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ «Π΄ΡΠΎΠ±ΠΈΡΡ ΠΏΠΎΠΊΠ° Π΄ΡΠΎΠ±ΠΈΡΡΡ», Π½ΠΎ ΠΈ Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΡΠ°ΡΠ°ΡΡΡΡ β «Π½Π΅ ΡΠ°Π·Π΄ΡΠΎΠ±ΠΈΡΡ ΡΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΠ΅ Π²Π΅ΡΠΈ». ΠΡΠΎ Π²Π΅Π»ΠΈΠΊΠ°Ρ Π±ΠΈΡΠ²Π° Π±ΡΠΈΡΠ²Ρ ΠΠΊΠΊΠ°ΠΌΠ° Ρ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ-ΠΎΠ±Π΅Π·ΡΡΠ½ΠΎΠΉ!
Π’Π΅ΠΏΠ΅ΡΡ Π²ΡΠΏΠΈΠ²ΠΎΡ Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΡΠ°ΡΡ ΠΏΠΎΠ»Π΅Π³ΡΠ΅. ΠΠΎΠΌΠΈΠΌΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½Π΅ Π½Π°Π΄ΠΎ Π΄ΡΠΎΠ±ΠΈΡΡ Π»ΠΎΠ³ΠΈΡΠΎΠ²ΡΠΈΠΊ IPourLogger Π½Π° ΡΡΠΈ ΠΊΠ»Π°ΡΡΠ°, ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π²ΡΠ΅ Π»ΠΎΠ³ΠΈΡΠΎΠ²ΡΠΈΠΊΠΈ Π² ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΏ:
class OperationLogger{
public OperationLogger(string operationName){/*..*/}
public void LogBefore(object[] args){/*...*/}
public void LogAfter(object[] args){/*..*/}
public void LogError(object[] args, exception e){/*..*/}
}
Π Π΅ΡΠ»ΠΈ Π½Π°ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΡΡΠΉ ΡΠΈΠΏ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΡΠΎ Π΄Π»Ρ Π½Π΅Π΅ ΡΠΆΠ΅ Π³ΠΎΡΠΎΠ²Π° Π»ΠΎΠ³ΠΈΡΠΎΠ²ΠΊΠ°. Π ΠΊΠΎΠ΄ ΡΠ°ΠΌΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΠΈΡΡ ΠΈ ΠΈΠ·Π±Π°Π²Π»Π΅Π½ ΠΎΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΠΎΠ³ΠΎ ΡΡΠΌΠ°.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Ρ Π½Π°Ρ 5 ΠΊΠ»Π°ΡΡΠΎΠ² Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ Π²ΡΠΏΠΈΠ²Π°Π½ΠΈΡ:
- ΠΠΏΠ΅ΡΠ°ΡΠΈΡ Π½Π°Π»ΠΈΠ²Π°Π½ΠΈΡ
- ΠΠΏΠ΅ΡΠ°ΡΠΈΡ Π²ΡΠΏΠΈΠ²Π°Π½ΠΈΡ
- ΠΠΏΠ΅ΡΠ°ΡΠΈΡ Π·Π°Π΅Π΄Π°Π½ΠΈΡ
- ΠΠΎΠ³ΠΈΡΠΎΠ²ΡΠΈΠΊ
- Π€Π°ΡΠ°Π΄ Π²ΡΠΏΠΈΠ²ΠΎΡ ΠΈ
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π½ΠΈΡ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ ΡΡΡΠΎΠ³ΠΎ Π·Π° ΠΎΠ΄Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ, ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ΄Π½Ρ ΠΏΡΠΈΡΠΈΠ½Ρ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΡΠ΅ ΡΡ ΠΎΠΆΠΈΠ΅ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»Π° Π»Π΅ΠΆΠ°Ρ ΡΡΠ΄ΠΎΠΌ.
ΠΡΠΈΠΌΠ΅Ρ ΠΈΠ· ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ
ΠΠ΄Π½Π°ΠΆΠ΄Ρ ΠΌΡ ΠΏΠΈΡΠ°Π»ΠΈ ΡΠ΅ΡΠ²ΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ b2b ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. Π ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ GOD -ΠΌΠ΅ΡΠΎΠ΄ Π½Π° 200 ΡΡΡΠΎΠΊ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ:
- Π‘Ρ ΠΎΠ΄ΠΈ Π² 1Π‘ ΠΈ Π·Π°Π²Π΅Π΄ΠΈ ΡΡΠ΅Ρ
- Π‘ ΡΡΠΈΠΌ ΡΡΠ΅ΡΠΎΠΌ ΡΡ ΠΎΠ΄ΠΈ ΠΊ ΠΏΠ»Π°ΡΠ΅ΠΆΠ½ΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ Π·Π°Π²Π΅Π΄ΠΈ Π΅Π³ΠΎ ΡΠ°ΠΌ
- ΠΡΠΎΠ²Π΅ΡΡ, ΡΡΠΎ Π°ΠΊΠΊΠ°ΡΠ½Ρ Ρ ΡΠ°ΠΊΠΈΠΌ ΡΡΠ΅ΡΠΎΠΌ Π½Π΅ ΡΠΎΠ·Π΄Π°Π½ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅
- Π‘ΠΎΠ·Π΄Π°ΠΉ Π½ΠΎΠ²ΡΠΉ Π°ΠΊΠΊΠ°ΡΠ½Ρ
- Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π² ΠΏΠ»Π°ΡΠ΅ΠΆΠ½ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ ΠΈ Π½ΠΎΠΌΠ΅Ρ 1Ρ Π΄ΠΎΠ±Π°Π²Ρ Π² ΡΠ΅ΡΠ²ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ
- ΠΠΎΠ±Π°Π²Ρ Π² ΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± Π°ΠΊΠΊΠ°ΡΠ½ΡΠ΅
- Π‘ΠΎΠ·Π΄Π°ΠΉ Π½ΠΎΠΌΠ΅Ρ ΡΠΎΡΠΊΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π² ΡΠ΅ΡΠ²ΠΈΡΠ΅ ΡΠΎΡΠ΅ΠΊ. ΠΠ΅ΡΠ΅Π΄Π°ΠΉ Π² ΡΡΠΎΡ ΡΠ΅ΡΠ²ΠΈΡ Π½ΠΎΠΌΠ΅Ρ ΡΡΠ΅ΡΠ° 1Ρ.
Π Π±ΡΠ»ΠΎ Π² ΡΡΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ Π΅ΡΠ΅ ΠΎΠΊΠΎΠ»ΠΎ 10-ΡΠΈ Π±ΠΈΠ·Π½Π΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Ρ ΠΆΡΡΠΊΠΎΠΉ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΡΡΡΡ. ΠΠ±ΡΠ΅ΠΊΡ ΡΡΠ΅ΡΠ° Π½ΡΠΆΠ΅Π½ Π±ΡΠ» ΠΏΠΎΡΡΠΈ Π²ΡΠ΅ΠΌ. ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΎΡΠΊΠΈ ΠΈ ΠΈΠΌΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π½ΡΠΆΠ½Ρ Π±ΡΠ»ΠΈ Π² ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ Π²ΡΠ·ΠΎΠ²ΠΎΠ².
ΠΠΎΡΠ»Π΅ ΡΠ°ΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³Π°, ΠΌΡ ΡΠΌΠΎΠ³Π»ΠΈ ΠΎΡΠ΄Π΅Π»ΠΈΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠ°Π½ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Π°ΠΊΠΊΠ°ΡΠ½ΡΠΎΠΌ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ/ΠΊΠ»Π°ΡΡΡ. God ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠ»Π΅Π³ΡΠ°Π», Π½ΠΎ ΠΎΡΡΠ°Π»ΠΎΡΡ 100 ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΠΏΡΡΡΠ²Π°ΡΡΡΡ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Ρ ΠΎΡΠ΅Π»ΠΈ.
ΠΠΈΡΡ ΡΠ΅ΡΠ΅Π· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄Π½Π΅ΠΉ ΠΏΡΠΈΡΠ»ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΡΡΡ ΡΡΠΎΠ³ΠΎ «ΠΏΠΎΠ»Π΅Π³ΡΠ°Π²ΡΠ΅Π³ΠΎ» ΠΌΠ΅ΡΠΎΠ΄Π° β ΠΈ Π΅ΡΡΡ Π±ΠΈΠ·Π½Π΅Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌ. Π ΡΡΠΎ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π’Π Π±ΡΠ»ΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΡΠΌ. Π ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠΏΡΡΠΊΠ° ΡΠ°Π·Π±ΠΈΡΡ Π½Π° ΠΊΡΡΠΊΠΈ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π±ΡΠ΄Π΅Ρ Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ΠΌ SRP, Π° Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ.
Π€ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΌ.
ΠΡΠΈΡΠ»ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΡΡΠ°Π²ΠΈΡΡ Π² ΠΏΠΎΠΊΠΎΠ΅ Π½Π°ΡΠ΅Π³ΠΎ Π²ΡΠΏΠΈΠ²ΠΎΡ Ρ. ΠΡΡΡΠΈΡΠ΅ ΡΠ»Π΅Π·Ρ β ΠΌΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ Π½Π΅ΠΌΡ ΠΊΠ°ΠΊ-Π½ΠΈΠ±ΡΠ΄Ρ. Π ΡΠ΅ΠΉΡΠ°Ρ ΡΠΎΡΠΌΠ°Π»ΠΈΠ·ΡΠ΅ΠΌ Π·Π½Π°Π½ΠΈΡ ΠΈΠ· ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ.
Π€ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΌ 1. ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ SRP
- Π Π°Π·Π΄Π΅Π»ΡΠΉΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π½ΠΈΡ Π±ΡΠ» ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π΅Π½ Π·Π° ΡΡΠΎ-ΡΠΎ ΠΎΠ΄Π½ΠΎ.
- ΠΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ «ΠΏΠΎΠ²ΠΎΠ΄ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ». Π’ΠΎ Π΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ²ΠΎΠ΄ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠΈ.
- ΠΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠΈ. Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ. ΠΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΡΠ΄ΠΎΠΌ.
Π€ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΌ 2. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΊΡΠΈΡΠ΅ΡΠΈΠΈ ΡΠ°ΠΌΠΎΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ.
ΠΠ½Π΅ Π½Π΅ Π²ΡΡΡΠ΅ΡΠ°Π»ΠΈΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠ΅ ΠΊΡΠΈΡΠ΅ΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ SRP. ΠΠΎ Π΅ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ:
1) ΠΠ°Π΄Π°ΠΉΡΠ΅ ΡΠ΅Π±Π΅ Π²ΠΎΠΏΡΠΎΡ β ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ/ΠΌΠ΅ΡΠΎΠ΄/ΠΌΠΎΠ΄ΡΠ»Ρ/ΡΠ΅ΡΠ²ΠΈΡ. Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π° Π½Π΅Π³ΠΎ ΠΏΡΠΎΡΡΡΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ. ( Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ
ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΡ
ΠΠΏΡΠΎΡΠ΅ΠΌ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠ°ΡΡ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ
2) Π€ΠΈΠΊΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±Π°Π³Π° ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΡΠΈΡΠΈ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Π΅Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²/ΠΊΠ»Π°ΡΡΠΎΠ². Π ΠΈΠ΄Π΅Π°Π»Π΅ β ΠΎΠ΄ΠΈΠ½.
ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΡ
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ (Π·Π° ΡΠΈΡΡ ΠΈΠ»ΠΈ Π±Π°Π³) ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠΎΠ²Π°Π½Π½Π° Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅/ΠΊΠ»Π°ΡΡΠ΅, ΡΠΎ Π²Ρ ΡΠΎΡΠ½ΠΎ Π·Π½Π°Π΅ΡΠ΅ Π³Π΄Π΅ ΠΈΡΠΊΠ°ΡΡ ΠΈ ΡΡΠΎ ΠΏΡΠ°Π²ΠΈΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ: ΡΠΈΡΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²ΡΠ²ΠΎΠ΄Π° Π»ΠΎΠ³ΠΈΡΠΎΠ²ΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π»ΠΎΠ³ΠΈΡΠΎΠ²ΡΠΈΠΊ. ΠΠ΅Π³Π°ΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ.
ΠΡΡΠ³ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ β Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ UI-ΠΊΠΎΠ½ΡΡΠΎΠ»Π°, ΡΡ ΠΎΠΆΠ΅Π³ΠΎ Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌΠΈ. ΠΡΠ»ΠΈ ΡΡΠΎ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ Π²Π°Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ 10 ΡΠ°Π·Π½ΡΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΈ 15 ΡΠ°Π·Π½ΡΡ ΠΊΠΎΠ½Π²Π΅ΡΡΠ΅ΡΠΎΠ² β ΠΊΠ°ΠΆΠ΅ΡΡΡ, Π²Ρ βΠΏΠ΅ΡΠ΅Π΄ΡΠΎΠ±ΠΈΠ»ΠΈβ.
3)ΠΡΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π°Π΄ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΈΡΠ°ΠΌΠΈ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΡΠΎ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΠΌΠ΅ΡΠ΄ΠΆ -ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ°, ΡΠΎ Π΅ΡΡΡ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΉΠ»/ΠΊΠ»Π°ΡΡ Π±ΡΠ΄Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ β ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Π°.
ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΡ
ΠΡΠ»ΠΈ ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ «ΠΡΠ»ΠΈΡΡ Π²ΠΎΠ΄ΠΊΡ ΠΏΠΎΠ΄ ΡΡΠΎΠ»» Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π·Π°ΡΡΠΎΠ½ΡΡΡ Π»ΠΎΠ³ΠΈΡΠΎΠ²ΡΠΈΠΊ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π²ΡΠΏΠΈΠ²Π°Π½ΠΈΡ ΠΈ Π²ΡΠ»ΠΈΠ²Π°Π½ΠΈΡ β ΡΠΎ ΠΏΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Ρ ΠΊΡΠΈΠ²ΠΎ. ΠΠ΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎ, ΡΡΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ Π½ΡΠΆΠ½ΠΎ ΡΡΠ°ΡΠ°ΡΡΡΡ ΡΠ½ΠΈΠ·ΠΈΡΡ ΡΡΠΎΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Ρ.
4) ΠΡΠΈ ΡΡΠΎΡΠ½ΡΡΡΠ΅ΠΌ Π²ΠΎΠΏΡΠΎΡΠ΅ ΠΏΡΠΎ Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΡ (ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ°) Π²Ρ Π»Π΅Π·Π΅ΡΠ΅ ΡΡΡΠΎΠ³ΠΎ Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»Π°ΡΡ/ΡΠ°ΠΉΠ» ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡ ΡΡΠ΄Π°.
ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΡ
Π€ΠΈΡΠΈ, ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈΠ»ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Ρ ΠΊΠ°ΠΆΠ΄Π°Ρ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅, Π° Π½Π΅ ΡΠ°Π·Π±ΡΠΎΡΠ°Π½Ρ ΡΠ»Π°Π³Π°ΠΌΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Ρ ΠΊΠΎΠ΄Π°.
5) ΠΠ΅ΠΉΠΌΠΈΠ½Π³ ΠΏΠΎΠ½ΡΡΠ΅Π½.
ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΡ
ΠΠ°Ρ ΠΊΠ»Π°ΡΡ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π΅Π½ Π·Π° ΡΡΠΎ-ΡΠΎ ΠΎΠ΄Π½ΠΎ, ΠΈ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ ΠΎΡΡΠ°ΠΆΠ΅Π½Π° Π² Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠΈ
AllManagersManagerService β ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, God-ΠΊΠ»Π°ΡΡ
LocalPayment β Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π½Π΅Ρ
Π€ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΌ 3. ΠΠ΅ΡΠΎΠ΄ΠΈΠΊΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ «ΠΠΊΠΊΠ°ΠΌΠ°-first».
Π Π½Π°ΡΠ°Π»Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ-ΠΎΠ±Π΅Π·ΡΡΠ½ΠΊΠ° Π½Π΅ Π·Π½Π°Π΅Ρ ΠΈ Π½Π΅ ΡΡΠ²ΡΡΠ²ΡΠ΅Ρ Π²ΡΠ΅Ρ ΡΠΎΠ½ΠΊΠΎΡΡΠ΅ΠΉ ΡΠ΅ΡΠ°Π΅ΠΌΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π΄Π°ΡΡ ΠΌΠ°Ρ Ρ. ΠΡΠΈΠ±Π°ΡΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ ΡΠ°Π·Π½ΠΎΠΌΡ:
- Π‘Π΄Π΅Π»Π°ΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΡΠΊΠ»Π΅ΠΈΠ² ΡΠ°Π·Π½ΡΠ΅ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ
- ΠΠ΅ΡΠ΅Π΄ΡΠΎΠ±ΠΈΡΡ, ΡΠ°Π·Π΄Π΅Π»ΠΈΠ² Π΅Π΄ΠΈΠ½ΡΡ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ²
- ΠΠ΅Π²Π΅ΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π³ΡΠ°Π½ΠΈΡΡ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ
ΠΠ°ΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ: «ΠΎΡΠΈΠ±Π°ΡΡΡΡ Π»ΡΡΡΠ΅ Π² Π±ΠΎΠ»ΡΡΡΡ ΡΡΠΎΡΠΎΠ½Ρ», ΠΈΠ»ΠΈ «Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½Ρ β Π½Π΅ Π΄ΡΠΎΠ±ΠΈΡΠ΅». ΠΡΠ»ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Π°Ρ ΠΊΠ»Π°ΡΡ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ Π² ΡΠ΅Π±Π΅ Π΄Π²Π΅ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ β ΡΠΎ ΠΎΠ½ ΠΏΠΎ ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΏΠΎΠ½ΡΡΠ΅Π½ ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΠΏΠΈΠ»ΠΈΡΡ Π½Π° Π΄Π²Π° Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π‘ΠΎΠ±ΠΈΡΠ°ΡΡ ΠΆΠ΅ ΠΈΠ· ΠΎΡΠΊΠΎΠ»ΠΊΠΎΠ² ΡΡΠ΅ΠΊΠ»Π° ΡΡΠ°ΠΊΠ°Π½, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠ»ΠΎΠΆΠ½Π΅Π΅ ΠΈΠ·-Π·Π° ΡΠ°Π·ΠΌΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΡΠ°ΠΉΠ»Π°ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π² ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΌ ΠΊΠΎΠ΄Π΅.
ΠΠΎΡΠ° Π·Π°ΠΊΡΡΠ³Π»ΡΡΡΡΡ
Π‘ΡΠ΅ΡΠ° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ SRP Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΠΠ ΠΈ SOLID. ΠΠ½ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΊ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ, ΡΡΠ½ΠΊΡΠΈΡΠΌ, ΠΊΠ»Π°ΡΡΠ°ΠΌ, ΠΌΠΎΠ΄ΡΠ»ΡΠΌ, ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌ ΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌ. ΠΠ½ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΊΠ°ΠΊ ΠΊ βΡΠΈΠ³Π°ΠΊΡ-ΡΠΈΠ³Π°ΠΊΡ-ΠΈ-Π²-ΠΏΡΠΎΠ΄β, ΡΠ°ΠΊ ΠΈ ΠΊ βΡΠΎΠΊΠ΅Ρ-ΡΠ°ΠΉΠ½Ρβ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅, Π²Π΅Π·Π΄Π΅ Π΄Π΅Π»Π°Ρ ΠΌΠΈΡ ΡΡΡΠΎΡΠΊΡ Π»ΡΡΡΠ΅. ΠΡΠ»ΠΈ Π·Π°Π΄ΡΠΌΠ°ΡΡΡΡ, ΡΠΎ ΡΡΠΎ Π΅Π΄Π²Π° Π»ΠΈ Π½Π΅ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π²ΡΠ΅ΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΈΠΈ. ΠΠ°ΡΠΈΠ½ΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅, ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, Π΄Π° ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π²ΡΠ΅ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ β ΡΡΡΠΎΡΡΡΡ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΠΈ βΠ½Π΅Π΄ΠΎΠ΄ΡΠΎΠ±Π»Π΅Π½ΠΈΠ΅β Π»ΠΈΡΠ°Π΅Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ² Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ, βΠΏΠ΅ΡΠ΅Π΄ΡΠΎΠ±Π»Π΅Π½ΠΈΠ΅β β ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ, Π° Π½Π΅Π²Π΅ΡΠ½ΡΠ΅ Π³ΡΠ°Π½ΠΈΡΡ β ΡΠ°Π·ΡΠΌΠ° ΠΈ Π΄ΡΡΠ΅Π²Π½ΠΎΠ³ΠΎ ΡΠΏΠΎΠΊΠΎΠΉΡΡΠ²ΠΈΡ.
SRP Π½Π΅ Π²ΡΠ΄ΡΠΌΠ°Π½ ΠΏΡΠΈΡΠΎΠ΄ΠΎΠΉ ΠΈ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ ΡΠΎΡΠ½ΠΎΠΉ Π½Π°ΡΠΊΠΈ. ΠΠ½ Π²ΡΠ»Π΅Π·Π°Π΅Ρ ΠΈΠ· Π½Π°ΡΠΈΡ Ρ Π²Π°ΠΌΠΈ Π±ΠΈΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈ ΠΏΡΠΈΡ ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ.ΠΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΡΠΏΠΎΡΠΎΠ± ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΌΠΎΠ·Π³Π° ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°-ΠΎΠ±Π΅Π·ΡΡΠ½Ρ. ΠΠ½ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π°ΠΌ, ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²ΠΊΠ° ΡΡΠ΅Π±ΠΎΠ²Π°Π»Π° ΠΈΠ·ΡΡΠ΄Π½ΠΎΠ³ΠΎ Π½Π°Π²ΡΠΊΠ° ΡΠ΅Π»Π΅ΠΏΠ°ΡΠΈΠΈ, Π½ΠΎ Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠ° ΡΡΠ°ΡΡΡ ΡΠ»Π΅Π³ΠΊΠ° ΡΠ°Π·Π²Π΅ΡΠ»Π° Π΄ΡΠΌΠΎΠ²ΡΡ Π·Π°Π²Π΅ΡΡ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com