ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° Π΅Π΄ΠΈΠ½Π½Π°Ρ‚Π° отговорност. НС Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° просто, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° Π΅Π΄ΠΈΠ½Π½Π°Ρ‚Π° отговорност. НС Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° просто, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Π° отговорност, извСстСн ΡΡŠΡ‰ΠΎ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Π° отговорност,
извСстСн ΠΎΡ‰Π΅ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° Π΅Π΄Π½Π°ΠΊΠ²Π° промСнливост - ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ…Π»ΡŠΠ·Π³Π°Π² Ρ‡ΠΎΠ²Π΅ΠΊ Π·Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π½Π΅Ρ€Π²Π΅Π½ Π²ΡŠΠΏΡ€ΠΎΡ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŽ Π·Π° програмист.

ΠŸΡŠΡ€Π²ΠΎΡ‚ΠΎ ΠΌΠΈ ΠΏΠΎ-сСриозно Π·Π°ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ с Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ стана Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° ΠΏΡŠΡ€Π²Π°Ρ‚Π° Π³ΠΎΠ΄ΠΈΠ½Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΌΠ»Π°Π΄ΠΈΡ‚Π΅ ΠΈ Π·Π΅Π»Π΅Π½ΠΈΡ‚Π΅ бяха ΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈ Π² Π³ΠΎΡ€Π°Ρ‚Π°, Π·Π° Π΄Π° направят ΠΎΡ‚ Π»Π°Ρ€Π²ΠΈΡ‚Π΅ ΡƒΡ‡Π΅Π½ΠΈΡ†ΠΈ - истински ΡƒΡ‡Π΅Π½ΠΈΡ†ΠΈ.

Π’ Π³ΠΎΡ€Π°Ρ‚Π° Π½ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ…Π° Π½Π° Π³Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ ΠΏΠΎ 8-9 Ρ‡ΠΎΠ²Π΅ΠΊΠ° ΠΈ сС ΡΡŠΡΡ‚Π΅Π·Π°Π²Π°Ρ…ΠΌΠ΅ - коя Π³Ρ€ΡƒΠΏΠ° Ρ‰Π΅ ΠΈΠ·ΠΏΠΈΠ΅ Π½Π°ΠΉ-Π±ΡŠΡ€Π·ΠΎ Π±ΡƒΡ‚ΠΈΠ»ΠΊΠ° Π²ΠΎΠ΄ΠΊΠ°, ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Π΅ ΠΏΡŠΡ€Π²ΠΈΡΡ‚ ΠΎΡ‚ Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° Π½Π°Π»ΠΈΠ²Π° Π²ΠΎΠ΄ΠΊΠ° Π² Ρ‡Π°ΡˆΠ°, вторият я ΠΈΠ·ΠΏΠΈΠ²Π°, Π° трСтият ΠΈΠΌΠ° Π»Π΅ΠΊΠ° закуска. Устройството, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π·Π°Π²ΡŠΡ€ΡˆΠΈΠ»ΠΎ своята опСрация, сС прСмСства Π² края Π½Π° ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π° Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π°.

Блучаят, Π² ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π° Π΅ ΠΊΡ€Π°Ρ‚Π΅Π½ Π½Π° Ρ‚Ρ€ΠΈ, Π΅ Π΄ΠΎΠ±Ρ€Π° рСализация Π½Π° SRP.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ 1. Π•Π΄ΠΈΠ½ΠΈΡ‡Π½Π° отговорност.

ΠžΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π°Ρ‚Π° дСфиниция Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° Π΅Π΄ΠΈΠ½Π½Π°Ρ‚Π° отговорност (SRP) гласи, Ρ‡Π΅ всСки субСкт ΠΈΠΌΠ° своя собствСна отговорност ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π·Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Π½Π΅ ΠΈ ΠΈΠΌΠ° само Π΅Π΄Π½Π° отговорност.

ΠŸΠΎΠΌΠΈΡΠ»Π΅Ρ‚Π΅ Π·Π° ΠΎΠ±Π΅ΠΊΡ‚Π° β€žΠŸΠΈΡΡ‡β€œ (Бамосвал).
Π—Π° Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° SRP, Ρ‰Π΅ Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ отговорноститС Π½Π° Ρ‚Ρ€ΠΈ:

  • Π•Π΄ΠΈΠ½ ΠΈΠ·Π»ΠΈΠ²Π° (PourOperation)
  • Π•Π΄Π½ΠΎ ΠΏΠΈΠ΅Π½Π΅ (DrinkUpOperation)
  • Π§ΠΎΠ²Π΅ΠΊ ΠΈΠΌΠ° закуска (TakeBiteOperation)

ВсСки ΠΎΡ‚ участницитС Π² процСса Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π΅Π½ Π·Π° Π΅Π΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π° процСса, тоСст ΠΈΠΌΠ° Π΅Π΄Π½Π° Π°Ρ‚ΠΎΠΌΠ½Π° отговорност - Π΄Π° ΠΏΠΈΠ΅, Π΄Π° Π½Π°Π»Π΅Π΅ ΠΈΠ»ΠΈ Π΄Π° Ρ…Π°ΠΏΠ½Π΅.

ΠžΡ‚ своя страна Π΄ΡƒΠΏΠΊΠ°Ρ‚Π° Π·Π° ΠΏΠΈΠ΅Π½Π΅ Π΅ фасада Π·Π° Ρ‚Π΅Π·ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:

сlass Tippler {
    //...
    void Act(){
        _pourOperation.Do() // Π½Π°Π»ΠΈΡ‚ΡŒ
        _drinkUpOperation.Do() // Π²Ρ‹ΠΏΠΈΡ‚ΡŒ
        _takeBiteOperation.Do() // Π·Π°ΠΊΡƒΡΠΈΡ‚ΡŒ
    }
}

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° Π΅Π΄ΠΈΠ½Π½Π°Ρ‚Π° отговорност. НС Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° просто, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°

Π—Π°Ρ‰ΠΎ?

Π§ΠΎΠ²Π΅ΠΊΡŠΡ‚ програмист пишС ΠΊΠΎΠ΄ Π·Π° Ρ‡ΠΎΠ²Π΅ΠΊΠ°-ΠΌΠ°ΠΉΠΌΡƒΠ½Π°, Π° Ρ‡ΠΎΠ²Π΅ΠΊΡŠΡ‚-ΠΌΠ°ΠΉΠΌΡƒΠ½Π° Π΅ Π½Π΅Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π΅Π½, Π³Π»ΡƒΠΏΠ°Π² ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ Π±ΡŠΡ€Π·Π°. Π’ΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΡŠΡ€ΠΆΠΈ ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π° ΠΎΠΊΠΎΠ»ΠΎ 3 - 7 Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° навСднъТ.
Π’ случай Π½Π° пияница ΠΈΠΌΠ° Ρ‚Ρ€ΠΈ ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈ. Ако ΠΎΠ±Π°Ρ‡Π΅ напишСм ΠΊΠΎΠ΄Π° с Π΅Π΄ΠΈΠ½ лист, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‚ΠΎΠΉ Ρ‰Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Ρ€ΡŠΡ†Π΅, ΠΎΡ‡ΠΈΠ»Π°, Π±ΠΈΡ‚ΠΊΠΈ ΠΈ Π±Π΅Π·ΠΊΡ€Π°ΠΉΠ½ΠΈ споровС Π·Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°. И всичко Ρ‚ΠΎΠ²Π° Ρ‰Π΅ бъдС Π² тялото Π½Π° Π΅Π΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄. Π‘ΠΈΠ³ΡƒΡ€Π΅Π½ съм, Ρ‡Π΅ стС Π²ΠΈΠΆΠ΄Π°Π»ΠΈ Ρ‚Π°ΠΊΡŠΠ² ΠΊΠΎΠ΄ Π² ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°Ρ‚Π° си. НС Π΅ Π½Π°ΠΉ-хуманният тСст Π·Π° психиката.

ΠžΡ‚ Π΄Ρ€ΡƒΠ³Π° страна, Ρ‡ΠΎΠ²Π΅ΠΊΡŠΡ‚-ΠΌΠ°ΠΉΠΌΡƒΠ½Π° Π΅ създадСн Π΄Π° симулира ΠΎΠ±Π΅ΠΊΡ‚ΠΈ ΠΎΡ‚ рСалния свят Π² Π³Π»Π°Π²Π°Ρ‚Π° си. Π’ΡŠΠ² Π²ΡŠΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ си Ρ‚ΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ сблъсква, Π΄Π° сглобява Π½ΠΎΠ²ΠΈ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΈ ΠΎΡ‚ тях ΠΈ Π΄Π° Π³ΠΈ разглобява ΠΏΠΎ ΡΡŠΡ‰ΠΈΡ Π½Π°Ρ‡ΠΈΠ½. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Ρ‚Π΅ си стар ΠΌΠΎΠ΄Π΅Π» ΠΊΠΎΠ»Π°. Π’ΡŠΠ² Π²Π°ΡˆΠ΅Ρ‚ΠΎ Π²ΡŠΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ Π²Ρ€Π°Ρ‚Π°Ρ‚Π°, Π΄Π° Ρ€Π°Π·Π²ΠΈΠ΅Ρ‚Π΅ тапицСрията Π½Π° Π²Ρ€Π°Ρ‚Π°Ρ‚Π° ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‚Π°ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈΡ‚Π΅ Π·Π° ΠΏΠΎΠ²Π΄ΠΈΠ³Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†Π°, Π²ΡŠΡ‚Ρ€Π΅ Π² ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ ΠΈΠΌΠ° зъбни ΠΊΠΎΠ»Π΅Π»Π°. Но Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ всички ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π² Π΅Π΄ΠΈΠ½ "списък". ПонС β€žΡ‡ΠΎΠ²Π΅ΠΊΡŠΡ‚-ΠΌΠ°ΠΉΠΌΡƒΠ½Π°β€œ Π½Π΅ ΠΌΠΎΠΆΠ΅.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ Ρ…ΠΎΡ€Π°Ρ‚Π° програмисти Ρ€Π°Π·Π»Π°Π³Π°Ρ‚ слоТнитС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈ Π½Π° Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ слоТни ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Ρ‚ΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π°Π·Π»ΠΎΠΆΠ΅Π½ ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ: Π² ΠΌΠ½ΠΎΠ³ΠΎ стари Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ Π²ΡŠΠ·Π΄ΡƒΡ…ΠΎΠ²ΠΎΠ΄ΡŠΡ‚ Π²Π»ΠΈΠ·Π° във Π²Ρ€Π°Ρ‚Π°Ρ‚Π°, Π° Π² ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΡ‚Π΅ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ ΠΏΠΎΠ²Ρ€Π΅Π΄Π° Π² Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½ΠΈΠΊΠ°Ρ‚Π° Π½Π° ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠ°Ρ‚Π° ΠΏΡ€Π΅Ρ‡ΠΈ Π½Π° двигатСля Π΄Π° стартира, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€ΠΈ Ρ€Π΅ΠΌΠΎΠ½Ρ‚.

Π‘Π΅Π³Π°, SRP Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, ΠΊΠΎΠΉΡ‚ΠΎ обяснява КАК Π΄Π° сС Ρ€Π°Π·Π»ΠΎΠΆΠΈ, тоСст къдС Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π½Π°Ρ‚Π° линия.

Π’ΠΎΠΉ ΠΊΠ°Π·Π²Π°, Ρ‡Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС Ρ€Π°Π·Π»ΠΎΠΆΠΈ спорСд ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° раздСлянС Π½Π° β€žΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π½ΠΎΡΡ‚Ρ‚Π°β€œ, тоСст спорСд Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° Π΅Π΄ΠΈΠ½Π½Π°Ρ‚Π° отговорност. НС Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° просто, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°

Π”Π° сС β€‹β€‹Π²ΡŠΡ€Π½Π΅ΠΌ към ΠΏΠΈΠ΅Π½Π΅Ρ‚ΠΎ ΠΈ прСдимствата, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‡ΠΎΠ²Π΅ΠΊΡŠΡ‚-ΠΌΠ°ΠΉΠΌΡƒΠ½Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π·Π»Π°Π³Π°Π½Π΅Ρ‚ΠΎ:

  • ΠšΠΎΠ΄ΡŠΡ‚ стана ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ясСн Π½Π° всяко Π½ΠΈΠ²ΠΎ
  • ΠšΠΎΠ΄ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС написан ΠΎΡ‚ няколко програмиста навСднъТ (всСки пишС ΠΎΡ‚Π΄Π΅Π»Π΅Π½ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚)
  • Автоматичното тСстванС Π΅ опростСно - ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎ-прост Π΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΡŠΡ‚, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-лСсно сС тСства
  • Появява сС ΡΡŠΡΡ‚Π°Π²Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° ΠΊΠΎΠ΄Π° - ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ DrinkUpOperation Π΄ΠΎ опСрация, ΠΏΡ€ΠΈ която пияница ΠΈΠ·Π»ΠΈΠ²Π° тСчност ΠΏΠΎΠ΄ масата. Или Π·Π°ΠΌΠ΅Π½Π΅Ρ‚Π΅ опСрацията ΠΏΠΎ Π½Π°Π»ΠΈΠ²Π°Π½Π΅ с опСрация, ΠΏΡ€ΠΈ която смСсватС Π²ΠΈΠ½ΠΎ ΠΈ Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ Π²ΠΎΠ΄ΠΊΠ° ΠΈ Π±ΠΈΡ€Π°. Π’ зависимост ΠΎΡ‚ бизнСс изискванията, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ всичко, Π±Π΅Π· Π΄Π° докосватС ΠΊΠΎΠ΄Π° Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π’ΠΈΠΏΠΏΠ»Π΅Ρ€.Акт.
  • ΠžΡ‚ Ρ‚Π΅Π·ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΠ³ΡŠΠ½Π΅Ρ‚Π΅ Π»Π°ΠΊΠΎΠΌΠ½ΠΈΠΊΠ° (ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ само TakeBitOperation), Алкохолик (само с ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° DrinkUpOperation Π½Π°ΠΏΡ€Π°Π²ΠΎ ΠΎΡ‚ Π±ΡƒΡ‚ΠΈΠ»ΠΊΠ°Ρ‚Π°) ΠΈ отговарят Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ бизнСс изисквания.

(О, ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π²Π΅Ρ‡Π΅ Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° OCP ΠΈ Π°Π· Π½Π°Ρ€ΡƒΡˆΠΈΡ… отговорността Π½Π° Ρ‚Π°Π·ΠΈ публикация)

И, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, минуситС:

  • Π©Π΅ трябва Π΄Π° създадСм ΠΏΠΎΠ²Π΅Ρ‡Π΅ Ρ‚ΠΈΠΏΠΎΠ²Π΅.
  • ΠŸΠΈΡΠ½ΠΈΡ†Π°Ρ‚Π° ΠΏΠΈΠ΅ Π·Π° ΠΏΡŠΡ€Π²ΠΈ ΠΏΡŠΡ‚ няколко часа ΠΏΠΎ-късно, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΈΠ½Π°Ρ‡Π΅ Π±ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΈΠ».

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ 2. Π•Π΄ΠΈΠ½Π½Π° промСнливост.

ΠŸΠΎΠ·Π²ΠΎΠ»Π΅Ρ‚Π΅, господа! ΠšΠ»Π°ΡΡŠΡ‚ ΠΏΠΎ ΠΏΠΈΠ΅Π½Π΅ ΡΡŠΡ‰ΠΎ носи Π΅Π΄Π½Π° СдинствСна отговорност - Ρ‚ΠΎΠΉ ΠΏΠΈΠ΅! И ΠΊΠ°Ρ‚ΠΎ цяло Π΄ΡƒΠΌΠ°Ρ‚Π° β€žΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π½ΠΎΡΡ‚β€œ Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ нСясно понятиС. Някой Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π΅Π½ Π·Π° ΡΡŠΠ΄Π±Π°Ρ‚Π° Π½Π° човСчСството ΠΈ някой Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π΅Π½ Π·Π° ΠΎΡ‚Π³Π»Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠΈΠ½Π³Π²ΠΈΠ½ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ бяха ΠΏΡ€Π΅ΠΎΠ±ΡŠΡ€Π½Π°Ρ‚ΠΈ Π½Π° полюса.

НСка Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π΄Π²Π΅ изпълнСния Π½Π° ΠΏΠΎΠΈΠ»ΠΊΠ°Ρ‚Π°. ΠŸΡŠΡ€Π²ΠΈΡΡ‚, спомСнат ΠΏΠΎ-Π³ΠΎΡ€Π΅, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Ρ‚Ρ€ΠΈ класа - Π½Π°Π»ΠΈΠ²Π°Π½Π΅, Π½Π°ΠΏΠΈΡ‚ΠΊΠ° ΠΈ закуска.

Вторият Π΅ написан Ρ‡Ρ€Π΅Π· мСтодологията β€žΠΠ°ΠΏΡ€Π΅Π΄ ΠΈ само Π½Π°ΠΏΡ€Π΅Π΄β€œ ΠΈ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° цялата Π»ΠΎΠ³ΠΈΠΊΠ° Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π°ΠΊΡ‚:

//НС Ρ‚Ρ€Π°Ρ‚ΡŒΡ‚Π΅ врСмя  Π½Π° ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ этого класса. Π›ΡƒΡ‡ΡˆΠ΅ ΡΡŠΠ΅ΡˆΡŒΡ‚Π΅ ΠΏΠ΅Ρ‡Π΅Π½ΡŒΠΊΡƒ
с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 - ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡŠΡ‚ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Π°Ρ‚Π° промСнливост.

SCP заявява, Ρ‡Π΅ "Π•Π΄ΠΈΠ½ ΠΌΠΎΠ΄ΡƒΠ» ΠΈΠΌΠ° Π΅Π΄Π½Π° ΠΈ само Π΅Π΄Π½Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π΄Π° сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ". ВоСст, β€žΠžΡ‚Π³ΠΎΠ²ΠΎΡ€Π½ΠΎΡΡ‚Ρ‚Π° Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π·Π° ΠΏΡ€ΠΎΠΌΡΠ½Π°β€œ.

(ИзглСТда, Ρ‡Π΅ ΠΌΠΎΠΌΡ‡Π΅Ρ‚Π°Ρ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ са измислили ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎΡ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, са Π±ΠΈΠ»ΠΈ ΡƒΠ²Π΅Ρ€Π΅Π½ΠΈ Π² Ρ‚Π΅Π»Π΅ΠΏΠ°Ρ‚ΠΈΡ‡Π½ΠΈΡ‚Π΅ способности Π½Π° Ρ‡ΠΎΠ²Π΅ΠΊΠ°-ΠΌΠ°ΠΉΠΌΡƒΠ½Π°)

Π‘Π΅Π³Π° всичко си ΠΈΠ΄Π²Π° Π½Π° мястото. ΠžΡ‚Π΄Π΅Π»Π½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΈΡ‚Π΅ Π·Π° Π½Π°Π»ΠΈΠ²Π°Π½Π΅, ΠΏΠΈΠ΅Π½Π΅ ΠΈ Π»Π΅ΠΊΠ° закуска, Π½ΠΎ Π² самата ΠΏΠΎΠΈΠ»ΠΊΠ° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ само послСдоватСлността ΠΈ ΡΡŠΡΡ‚Π°Π²Π° Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°Ρ‚ΠΎ прСмСстим закуската ΠΏΡ€Π΅Π΄ΠΈ ΠΏΠΈΠ΅Π½Π΅ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ‡Π΅Ρ‚Π΅Π½Π΅Ρ‚ΠΎ Π½Π° тост.

ΠŸΡ€ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° β€žΠΠ°ΠΏΡ€Π΅Π΄ ΠΈ само Π½Π°ΠΏΡ€Π΅Π΄β€œ всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, сС промСня само Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π°ΠΊΡ‚. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΠΎ ΠΈ Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ° ΠΌΠ°Π»ΠΊΠΎ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΈ рядко сС промСня, Π½ΠΎ чСсто Π·Π°Π²ΡŠΡ€ΡˆΠ²Π° с уТасни ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΎΡ‚ 500 Ρ€Π΅Π΄Π° всСки, с ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΈΠ·Ρ€Π°Π·ΠΈ Π°ΠΊΠΎ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Русия Π΄Π° сС ΠΏΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½ΠΈ към НАВО.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ 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 Ρ€Π΅Π΄Π° с ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅:

  • ΠžΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° 1C ΠΈ ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Π°ΠΊΠ°ΡƒΠ½Ρ‚
  • Π‘ Ρ‚ΠΎΠ·ΠΈ Π°ΠΊΠ°ΡƒΠ½Ρ‚ ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π² ΠΌΠΎΠ΄ΡƒΠ»Π° Π·Π° ΠΏΠ»Π°Ρ‰Π°Π½Π΅ ΠΈ Π³ΠΎ ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΌ
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ Π΄Π°Π»ΠΈ Π½Π° главния ΡΡŠΡ€Π²ΡŠΡ€ Π½Π΅ Π΅ създадСн Π°ΠΊΠ°ΡƒΠ½Ρ‚ с Ρ‚Π°ΠΊΡŠΠ² Π°ΠΊΠ°ΡƒΠ½Ρ‚
  • БъздаванС Π½Π° Π½ΠΎΠ² Π°ΠΊΠ°ΡƒΠ½Ρ‚
  • Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ рСгистрацията Π² ΠΌΠΎΠ΄ΡƒΠ»Π° Π·Π° ΠΏΠ»Π°Ρ‰Π°Π½Π΅ ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° 1c към услугата Π·Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΎΡ‚ рСгистрацията
  • Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ информация Π·Π° Π°ΠΊΠ°ΡƒΠ½Ρ‚Π° към Ρ‚Π°Π·ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π°
  • Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€ Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π·Π° Ρ‚ΠΎΠ·ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π² услугата Π·Π° Ρ‚ΠΎΡ‡ΠΊΠΈ. ΠŸΡ€Π΅Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° Π½Π° смСтката си Π² 1c Π½Π° Ρ‚Π°Π·ΠΈ услуга.

И Π² Ρ‚ΠΎΠ·ΠΈ списък имашС ΠΎΡ‰Π΅ ΠΎΠΊΠΎΠ»ΠΎ 10 бизнСс ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с уТасна ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎΡΡ‚. ΠŸΠΎΡ‡Ρ‚ΠΈ всСки имашС Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ ΠΎΠ±Π΅ΠΊΡ‚Π° Π½Π° Π°ΠΊΠ°ΡƒΠ½Ρ‚Π°. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΈΡΡ‚ Π½ΠΎΠΌΠ΅Ρ€ Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°Ρ‚Π° ΠΈ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° бяха Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°Ρ‚Π° ΠΎΡ‚ обаТданията.

Π‘Π»Π΅Π΄ Π΅Π΄ΠΈΠ½ час Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ успяхмС Π΄Π° Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ инфраструктурния ΠΊΠΎΠ΄ ΠΈ някои ΠΎΡ‚ Π½ΡŽΠ°Π½ΡΠΈΡ‚Π΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π°ΠΊΠ°ΡƒΠ½Ρ‚ Π² ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ/класовС. ΠœΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ Π½Π° Π‘ΠΎΠ³ Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΏΠΎ-лСсСн, Π½ΠΎ бяха останали 100 Ρ€Π΅Π΄Π° ΠΊΠΎΠ΄, ΠΊΠΎΠΈΡ‚ΠΎ просто Π½Π΅ искаха Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π°Π·ΠΏΠ»Π΅Ρ‚Π΅Π½ΠΈ.

Π‘Π°ΠΌΠΎ слСд няколко Π΄Π½ΠΈ стана ясно, Ρ‡Π΅ ΡΡŠΡ‰Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° Ρ‚ΠΎΠ·ΠΈ β€žΠ»Π΅ΠΊβ€œ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΅ бизнСс Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ. И Ρ‡Π΅ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎΡ‚ΠΎ описаниС Π½Π° тСхничСскитС спСцификации Π΅ доста слоТно. И ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠΏΠΈΡ‚ΡŠΡ‚ Π΄Π° сС Ρ€Π°Π·Π±ΠΈΠ΅ Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° ΠΏΠ°Ρ€Ρ‡Π΅Ρ‚Π° Ρ‰Π΅ Π½Π°Ρ€ΡƒΡˆΠΈ SRP, Π° Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΡ‚ΠΎ.

Π€ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΡŠΠΌ.

Π’Ρ€Π΅ΠΌΠ΅ Π΅ Π΄Π° оставим нашия пияница Π½Π° ΠΌΠΈΡ€Π°. Π˜Π·Ρ‚Ρ€ΠΈΠΉ ΡΡŠΠ»Π·ΠΈΡ‚Π΅ си - със сигурност Ρ‰Π΅ сС Π²ΡŠΡ€Π½Π΅ΠΌ към Π½Π΅Π³ΠΎ някой Π΄Π΅Π½. Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ знанията ΠΎΡ‚ Ρ‚Π°Π·ΠΈ статия.

Π€ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΡŠΠΌ 1. ДСфиниция Π½Π° SRP

  1. Π Π°Π·Π΄Π΅Π»Π΅Ρ‚Π΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠ°, Ρ‡Π΅ всСки ΠΎΡ‚ тях Π΄Π° отговаря Π·Π° Π΅Π΄Π½ΠΎ Π½Π΅Ρ‰ΠΎ.
  2. ΠžΡ‚Π³ΠΎΠ²ΠΎΡ€Π½ΠΎΡΡ‚Ρ‚Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° β€žΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π·Π° ΠΏΡ€ΠΎΠΌΡΠ½Π°β€œ. ВоСст, всСки Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ ΠΈΠΌΠ° само Π΅Π΄Π½Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π·Π° промяна, ΠΎΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π°.
  3. ΠŸΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π°. трябва Π΄Π° сС Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚. Π•Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ сС промСнят синхронно, трябва Π΄Π° са Π½Π°Π±Π»ΠΈΠ·ΠΎ.

Π€ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΡŠΠΌ 2. НСобходими ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ Π·Π° самопровСрка.

НС видях Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ Π·Π° изпълнСниС Π½Π° SRP. Но ΠΈΠΌΠ° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ условия:

1) Π—Π°ΠΏΠΈΡ‚Π°ΠΉΡ‚Π΅ сС ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡ€Π°Π²ΠΈ Ρ‚ΠΎΠ·ΠΈ клас/ΠΌΠ΅Ρ‚ΠΎΠ΄/ΠΌΠΎΠ΄ΡƒΠ»/услуга. трябва Π΄Π° ΠΌΡƒ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ с проста дСфиниция. ( Благодаря Ρ‚ΠΈ Π‘Ρ€Π°ΠΉΡ‚ΠΎΡ€ΠΈ )

обяснСния

Понякога ΠΎΠ±Π°Ρ‡Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° сС Π½Π°ΠΌΠ΅Ρ€ΠΈ просто ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅

2) ΠšΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ° ΠΈΠ»ΠΈ добавянСто Π½Π° Π½ΠΎΠ²Π° функция засяга ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ Π±Ρ€ΠΎΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅/класовС. Π’ идСалния случай - Π΅Π΄ΠΈΠ½.

обяснСния

Въй ΠΊΠ°Ρ‚ΠΎ отговорността (Π·Π° функция ΠΈΠ»ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ°) Π΅ капсулирана Π² Π΅Π΄ΠΈΠ½ Ρ„Π°ΠΉΠ»/клас, Π²ΠΈΠ΅ Π·Π½Π°Π΅Ρ‚Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ къдС Π΄Π° Ρ‚ΡŠΡ€ΡΠΈΡ‚Π΅ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°Ρ‚Π΅. НапримСр: функцията Π·Π° промяна Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π° Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° рСгистриранС Ρ‰Π΅ изисква промяна само Π½Π° рСгистратора. Няма Π½ΡƒΠΆΠ΄Π° Π΄Π° ΠΌΠΈΠ½Π°Π²Π°Ρ‚Π΅ ΠΏΡ€Π΅Π· останалата част ΠΎΡ‚ ΠΊΠΎΠ΄Π°.

Π”Ρ€ΡƒΠ³ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅ добавянСто Π½Π° Π½ΠΎΠ² UI ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ», ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ‚Π΅. Ако Ρ‚ΠΎΠ²Π° Π²ΠΈ ΠΏΡ€ΠΈΠ½ΡƒΠΆΠ΄Π°Π²Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ 10 Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΎΠ±Π΅ΠΊΡ‚Π° ΠΈ 15 Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€Π°, ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, Ρ‡Π΅ прСкаляватС.

3) Ако няколко Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ работят Π²ΡŠΡ€Ρ…Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ характСристики Π½Π° вашия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Ρ‚ΠΎΠ³Π°Π²Π° вСроятността ΠΎΡ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ Π½Π° сливанС, Ρ‚.Π΅. вСроятността Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ΠΈ Ρ„Π°ΠΉΠ»/клас Π΄Π° бъдС ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ ΠΎΡ‚ няколко Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π°.

обяснСния

Ако ΠΏΡ€ΠΈ добавянС Π½Π° Π½ΠΎΠ²Π° опСрация β€žΠΠ°Π»Π΅ΠΉΡ‚Π΅ Π²ΠΎΠ΄ΠΊΠ° ΠΏΠΎΠ΄ ΠΌΠ°ΡΠ°Ρ‚Π°β€œ трябва Π΄Π° засСгнСтС Π΄ΡŠΡ€Π²ΠΎΡΠ΅ΠΊΠ°Ρ‡Π°, опСрацията Π·Π° ΠΏΠΈΠ΅Π½Π΅ ΠΈ Π½Π°Π»ΠΈΠ²Π°Π½Π΅, Ρ‚ΠΎΠ³Π°Π²Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, Ρ‡Π΅ отговорноститС са Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈ ΠΊΡ€ΠΈΠ²ΠΎ. Π Π°Π·Π±ΠΈΡ€Π° сС, Ρ‚ΠΎΠ²Π° Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ Π΅ възмоТно, Π½ΠΎ трябва Π΄Π° сС ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΠΌ Ρ‚Π°Π·ΠΈ Ρ†ΠΈΡ„Ρ€Π°.

4) ΠšΠΎΠ³Π°Ρ‚ΠΎ Π²ΠΈ бъдС Π·Π°Π΄Π°Π΄Π΅Π½ уточняващ Π²ΡŠΠΏΡ€ΠΎΡ относно бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° (ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΠ»ΠΈ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€), Π²ΠΈΠ΅ Π²Π»ΠΈΠ·Π°Ρ‚Π΅ строго Π² Π΅Π΄ΠΈΠ½ клас/Ρ„Π°ΠΉΠ» ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚Π΅ информация само ΠΎΡ‚ Ρ‚Π°ΠΌ.

обяснСния

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅, ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° ΠΈΠ»ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈΡ‚Π΅ са написани ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎ, всяка Π½Π° Π΅Π΄Π½ΠΎ място, Π° Π½Π΅ Ρ€Π°Π·ΠΏΡ€ΡŠΡΠ½Π°Ρ‚ΠΈ с Ρ„Π»Π°Π³ΠΎΠ²Π΅ Π² пространството Π½Π° ΠΊΠΎΠ΄Π°.

5) НаимСнуванСто Π΅ ясно.

обяснСния

ΠΠ°ΡˆΠΈΡΡ‚ клас ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π΅Π½ Π·Π° Π΅Π΄Π½ΠΎ Π½Π΅Ρ‰ΠΎ ΠΈ отговорността Π΅ ΠΎΡ‚Ρ€Π°Π·Π΅Π½Π° Π² ΠΈΠΌΠ΅Ρ‚ΠΎ ΠΌΡƒ

AllManagersManagerService - Π½Π°ΠΉ-вСроятно клас Π‘ΠΎΠ³
LocalPayment - вСроятно Π½Π΅

Π€ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΡŠΠΌ 3. ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Occam-first.

Π’ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° Π΄ΠΈΠ·Π°ΠΉΠ½Π° Ρ‡ΠΎΠ²Π΅ΠΊΡŠΡ‚-ΠΌΠ°ΠΉΠΌΡƒΠ½Π° Π½Π΅ Π·Π½Π°Π΅ ΠΈ Π½Π΅ усСща всички Ρ‚ΡŠΠ½ΠΊΠΎΡΡ‚ΠΈ Π½Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ°. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ:

  • НаправСтС ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ Ρ‚Π²ΡŠΡ€Π΄Π΅ Π³ΠΎΠ»Π΅ΠΌΠΈ, ΠΊΠ°Ρ‚ΠΎ ΠΎΠ±Π΅Π΄ΠΈΠ½ΠΈΡ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ отговорности
  • ΠŸΡ€Π΅Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€Π°Π½Π΅ Ρ‡Ρ€Π΅Π· раздСлянС Π½Π° Π΅Π΄Π½Π° отговорност Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π²ΠΈΠ΄ΠΎΠ²Π΅
  • НСправилно опрСдСлянС Π½Π° Π³Ρ€Π°Π½ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° отговорност

Π’Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ: β€žΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ голяма Π³Ρ€Π΅ΡˆΠΊΠ°β€œ ΠΈΠ»ΠΈ β€žΠ°ΠΊΠΎ Π½Π΅ стС сигурни, Π½Π΅ Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΡΠΉΡ‚Π΅β€œ. Ако, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Π°ΡˆΠΈΡΡ‚ клас ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π΄Π²Π΅ отговорности, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‚ΠΎΠΉ всС ΠΎΡ‰Π΅ Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ Π½Π° Π΄Π²Π΅ с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² клиСнтския ΠΊΠΎΠ΄. БглобяванСто Π½Π° Ρ‡Π°ΡˆΠ° ΠΎΡ‚ ΠΏΠ°Ρ€Ρ‡Π΅Ρ‚Π° ΡΡ‚ΡŠΠΊΠ»ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ ΠΏΠΎ-Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΠΎΡ€Π°Π΄ΠΈ Ρ€Π°Π·ΠΏΡ€ΡŠΡΠ½Π°Ρ‚ΠΈΡ контСкст Π² няколко Ρ„Π°ΠΉΠ»Π° ΠΈ липсата Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ зависимости Π² клиСнтския ΠΊΠΎΠ΄.

Π’Ρ€Π΅ΠΌΠ΅ Π΅ Π΄Π° Π³ΠΎ Π½Π°Ρ€Π΅Ρ‡Π΅ΠΌ Π΄Π΅Π½

ΠžΠ±Ρ…Π²Π°Ρ‚ΡŠΡ‚ Π½Π° SRP Π½Π΅ сС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π° Π΄ΠΎ OOP ΠΈ SOLID. ΠŸΡ€ΠΈΠ»Π°Π³Π° сС Π·Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, класовС, ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, микроуслуги ΠΈ услуги. ΠŸΡ€ΠΈΠ»Π°Π³Π° сС ΠΊΠ°ΠΊΡ‚ΠΎ Π·Π° β€žfigax-figax-and-prodβ€œ, Ρ‚Π°ΠΊΠ° ΠΈ Π·Π° β€žrocket-scienceβ€œ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ свСта ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π΄ΠΎΠ±ΡŠΡ€ навсякъдС. Ако сС замислитС, Ρ‚ΠΎΠ²Π° Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ основният ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° цялото инТСнСрство. ΠœΠ°ΡˆΠΈΠ½Π½ΠΎΡ‚ΠΎ инТСнСрство, систСмитС Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ всички слоТни систСми са ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΈ ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ ΠΈ β€žΠ½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎΡ‚ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½Π΅β€œ лишава Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ ΠΎΡ‚ Π³ΡŠΠ²ΠΊΠ°Π²ΠΎΡΡ‚, β€žΡΠ²Ρ€ΡŠΡ…Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎβ€œ лишава Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ ΠΎΡ‚ СфСктивност, Π° Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΈΡ‚Π΅ Π³Ρ€Π°Π½ΠΈΡ†ΠΈ Π³ΠΈ Π»ΠΈΡˆΠ°Π²Π°Ρ‚ ΠΎΡ‚ Ρ€Π°Π·ΡƒΠΌ ΠΈ спокойствиС.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° Π΅Π΄ΠΈΠ½Π½Π°Ρ‚Π° отговорност. НС Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° просто, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°

SRP Π½Π΅ Π΅ измислСно ΠΎΡ‚ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π°Ρ‚Π° ΠΈ Π½Π΅ Π΅ част ΠΎΡ‚ Ρ‚ΠΎΡ‡Π½Π°Ρ‚Π° Π½Π°ΡƒΠΊΠ°. Π’ΠΎΠΉ ΠΈΠ·Π»ΠΈΠ·Π° ΠΎΡ‚ Π½Π°ΡˆΠΈΡ‚Π΅ Π±ΠΈΠΎΠ»ΠΎΠ³ΠΈΡ‡Π½ΠΈ ΠΈ психологичСски ограничСния.Π’ΠΎΠ²Π° Π΅ просто Π½Π°Ρ‡ΠΈΠ½ Π΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°ΠΌΠ΅ ΠΈ Ρ€Π°Π·Π²ΠΈΠ²Π°ΠΌΠ΅ слоТни систСми, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ мозъка Π½Π° Ρ‡ΠΎΠ²Π΅ΠΊΠ°-ΠΌΠ°ΠΉΠΌΡƒΠ½Π°. Π’ΠΎΠΉ Π½ΠΈ ΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊ Π΄Π° Ρ€Π°Π·Π»ΠΎΠΆΠΈΠΌ Π΅Π΄Π½Π° систСма. ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½Π°Ρ‚Π° Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° изисква доста тСлСпатия, Π½ΠΎ сС надявам Ρ‚Π°Π·ΠΈ статия Π΄Π° изчисти част ΠΎΡ‚ Π΄ΠΈΠΌΠ½Π°Ρ‚Π° завСса.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€