Single Responsibility Principle. НС Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° прост, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°

Single Responsibility Principle. НС Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° прост, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° СдинствСната отговорност,
ΠΊΠΎΠ΅Ρ‚ΠΎ ΡΡŠΡ‰ΠΎ Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° Π΅Π΄ΠΈΠ½Π½Π°Ρ‚Π° измСнчивост β€” ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ нСясСн Π·Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π²ΡŠΠΏΡ€ΠΎΡ ΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π½Π΅Ρ€Π²Π΅Π½ Π² контСкста Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŽ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π·Π° програмист.

ΠŸΡŠΡ€Π²ΠΎΡ‚ΠΎ сСриозно запознанство с Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ бСшС Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° ΠΏΡŠΡ€Π²Π°Ρ‚Π° Π³ΠΎΠ΄ΠΈΠ½Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½ΠΈ Π·Π°Π²Π΅Π΄Π΅ Π² Π³ΠΎΡ€Π°Ρ‚Π°, Π·Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΎΡ‚ Π»ΠΈΡ‡ΠΈΠ½ΠΊΠΈΡ‚Π΅ студСнти β€” истински студСнти.

Π’ Π³ΠΎΡ€Π°Ρ‚Π° Π½ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ…Π° Π½Π° Π³Ρ€ΡƒΠΏΠΈ ΠΏΠΎ 8-9 Ρ‡ΠΎΠ²Π΅ΠΊΠ° ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Ρ…Π° ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΠ΅ β€” коя Π³Ρ€ΡƒΠΏΠ° ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ Ρ‰Π΅ ΠΈΠ·ΠΏΠΈΠ΅ Π±ΡƒΡ‚ΠΈΠ»ΠΊΠ° Π²ΠΎΠ΄ΠΊΠ°, ΠΏΡ€ΠΈ условиС, Ρ‡Π΅ ΠΏΡŠΡ€Π²ΠΈΡΡ‚ Ρ‡ΠΎΠ²Π΅ΠΊ ΠΎΡ‚ Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° Π½Π°Π»ΠΈΠ²Π° Π²ΠΎΠ΄ΠΊΠ° Π² Ρ‡Π°ΡˆΠ°Ρ‚Π°, вторият я ΠΈΠ·ΠΏΠΈΠ²Π°, Π° трСтият закусва. Π˜Π·Π²ΡŠΡ€ΡˆΠΈΠ» опСрацията участник застава Π² края Π½Π° ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π° Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π°.

Π‘Π»ΡƒΡ‡Π°ΠΉ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π° бСшС ΠΊΡ€Π°Ρ‚Π΅Π½ Π½Π° Ρ‚Ρ€ΠΈ, ΠΈ бСшС Π΄ΠΎΠ±Ρ€Π° рСализация Π½Π° SRP.

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

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

НСка Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΎΠ±Π΅ΠΊΡ‚ «Направляващ» (Tippler).
Π—Π° Π΄Π° изпълним ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° SRP, разпрСдСлямС Π·Π°Π΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΡΡ‚Π° Π½Π° Ρ‚Ρ€ΠΈΠΌΠ°:

  • Π•Π΄ΠΈΠ½ Π½Π°Π»ΠΈΠ²Π° (PourOperation)
  • Π•Π΄ΠΈΠ½ ΠΈΠ·ΠΏΠΈΠ²Π° (DrinkUpOperation)
  • Π•Π΄ΠΈΠ½ закусва (TakeBiteOperation)

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

Направляващият, ΠΎΡ‚ своя страна, Π΅ фасада Π·Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:

сlass Tippler {
    //...
    void Act(){
        _pourOperation.Do() // Π½Π°Π»Π΅ΠΉ
        _drinkUpOperation.Do() // ΠΈΠ·ΠΏΠΈΠΉ
        _takeBiteOperation.Do() // закуска
    }
}

Single Responsibility Principle. НС Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° прост, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°

Π—ΠΠ©Πž?

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

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

Π—Π°Ρ‚ΠΎΠ²Π° програмиститС чСсто Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ€Π° слоТни ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈ Π½Π° Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ слоТни ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, дСкомпозицията ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ: Π² ΠΌΠ½ΠΎΠ³ΠΎ стари ΠΊΠΎΠ»ΠΈ β€” Π²ΡŠΠ·Π΄ΡƒΡ…ΠΎΠ²ΠΎΠ΄ΡŠΡ‚ ΠΈΠ·Π»ΠΈΠ·Π° Π²Ρ€Π°Ρ‚Π°Ρ‚Π°, Π° Π² ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ‚Π΅ β€” ΠΏΠΎΠ²Ρ€Π΅Π΄Π° Π² Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½ΠΈΠΊΠ°Ρ‚Π° Π½Π° ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠ°Ρ‚Π° Π½Π΅ позволява Π΄Π° стартира двигатСля, ΠΊΠΎΠ΅Ρ‚ΠΎ затруднява Ρ€Π΅ΠΌΠΎΠ½Ρ‚Π°.

Π’Π°ΠΊΠ° Ρ‡Π΅, SRP β€” Ρ‚ΠΎΠ²Π° Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, ΠΊΠΎΠΉΡ‚ΠΎ обяснява КАК Π΄Π° сС Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ€Π°, Ρ‚.Π΅. къдС Π΄Π° сС Π½Π°Ρ‡Π΅Ρ€Ρ‚Π°Π΅ линия Π½Π° Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅.

Π’ΠΎΠΉ ΠΊΠ°Π·Π²Π°, Ρ‡Π΅ дСкомпозицията трябва Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° въз основа Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° "Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° отговорноститС", Ρ‚.Π΅. спорСд Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ.

Single Responsibility Principle. НС Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° прост, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°

НСка сС Π²ΡŠΡ€Π½Π΅ΠΌ към пияницата ΠΈ ΠΏΠ»ΡŽΡΠΎΠ²Π΅Ρ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Ρ‡ΠΎΠ²Π΅ΠΊΡŠΡ‚-обСзяна ΠΏΡ€ΠΈ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ€Π°Π½Π΅:

  • ΠšΠΎΠ΄ΡŠΡ‚ стана ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ясни Π½Π° всяко Π½ΠΈΠ²ΠΎ
  • ΠšΠΎΠ΄ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС написан ΠΎΡ‚ няколко програмисти Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ (всСки пишС ΠΎΡ‚Π΄Π΅Π»Π΅Π½ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚)
  • Автоматичното тСстванС сС опростява β€” ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎ-опростСн Π΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΡŠΡ‚, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-лСсно Π΅ Π΄Π° Π³ΠΎ тСстватС
  • Появява сС композиционност Π½Π° ΠΊΠΎΠ΄Π° β€” ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° замСнятС 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($"ΠŸΡ€Π΅Π΄ΠΈ Π½Π°Π»ΠΈΠ²Π°Π½Π΅ с {_hand} ΠΈ {_bottle}");
        //Π›ΠΎΠ³ΠΈΠΊΠ° Π½Π° Π½Π°Π»ΠΈΠ²Π°Π½Π΅Ρ‚ΠΎ...
        _log.Log($"БлСд наливанС с {_hand} и {_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{
             //... бизнСс логика
             _log.LogAfter(_hand, _bottle);
        }
        catch(exception e){
            _log.OnError(_hand, _bottle, e)
        }
    }
}

ВниматСлният Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π» Ρ‰Π΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ LogAfter, LogBefore ΠΈ OnError ΡΡŠΡ‰ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС промСнят ΠΏΠΎΠΎΡ‚Π΄Π΅Π»Π½ΠΎ ΠΈ ΠΏΠΎ аналогия с ΠΏΡ€Π΅Π΄Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ дСйствия Ρ‰Π΅ създадС Ρ‚Ρ€ΠΈ класа: PourLoggerBefore, PourLoggerAfter ΠΈ PourErrorLogger.

А ΠΊΠ°Ρ‚ΠΎ си спомним, Ρ‡Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° пияницата са Ρ‚Ρ€ΠΈ β€” ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Π΄Π΅Π²Π΅Ρ‚ класа Π·Π° Π»ΠΎΠ³ΠΈΡ€Π°Π½Π΅. Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка цСлият пияница сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ 14 (!!!) класа.

Π₯ΠΈΠΏΠ΅Ρ€Π±ΠΎΠ»Π°? Малко вСроятно! Π§ΠΎΠ²Π΅ΠΊ-ΠΌΠ°ΠΉΠΌΡƒΠ½Π° с Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Π° Π³Ρ€Π°Π½Π°Ρ‚Π° Ρ‰Π΅ Ρ€Π°Π·Π΄Ρ€ΠΎΠ±ΠΈ β€œΠ½Π°Π»ΠΈΠ²Π°Ρ‚Π΅Π»Ρβ€ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠ½, Ρ‡Π°ΡˆΠ°, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ Π½Π° Π½Π°Π»ΠΈΠ²Π°Π½Π΅, услуга Π·Π° ΠΏΠΎΠ΄Π°Π²Π°Π½Π΅ Π½Π° Π²ΠΎΠ΄Π°, физичСски ΠΌΠΎΠ΄Π΅Π» Π½Π° сблъсък Π½Π° ΠΌΠΎΠ»Π΅ΠΊΡƒΠ»ΠΈ ΠΈ слСдващия ΠΊΠ²Π°Ρ€Ρ‚Π°Π» Ρ‰Π΅ сС ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° Ρ€Π°Π·ΠΏΠ»Π΅Ρ‚Π΅ зависимоститС Π±Π΅Π· Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ. И повярвайтС β€” Ρ‚ΠΎΠΉ няма Π΄Π° спрС.

Π’ΠΎΡ‡Π½ΠΎ Π² Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Ρ…ΠΎΡ€Π° стигат Π΄ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, Ρ‡Π΅ SRP β€” Ρ‚ΠΎΠ²Π° са ΠΏΡ€ΠΈΠΊΠ°Π·ΠΊΠΈ ΠΎΡ‚ Ρ€ΠΎΠ·ΠΎΠ²ΠΈΡ‚Π΅ кралства ΠΈ ΠΎΡ‚ΠΈΠ²Π°Ρ‚ Π΄Π° Ρ‚ΡŠΠΊΠ°Ρ‚ спагСти...

… Ρ‚Π°ΠΊΠ° ΠΈ Π½Π΅ Ρ€Π°Π·Π±Ρ€Π°Π»ΠΈ Π·Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Ρ€Π΅Ρ‚ΠΎΡ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° SRP:

Β«ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡŠΡ‚ Π½Π° Π΅Π΄ΠΈΠ½Π½Π°Ρ‚Π° отговорност гласи, Ρ‡Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π·Π° промяна Π½Π΅Ρ‰Π° трябва Π΄Π° сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π½Π° Π΅Π΄Π½ΠΎ място«. ΠΈΠ»ΠΈ β€œΠ’ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ сС промСня Π·Π°Π΅Π΄Π½ΠΎ, трябва Π΄Π° сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π½Π° Π΅Π΄Π½ΠΎ място.”

Π˜Π½Π°Ρ‡Π΅ ΠΊΠ°Π·Π°Π½ΠΎ, Π°ΠΊΠΎ промСнямС Π»ΠΎΠ³ΠΈΡ€Π°Π½Π΅ Π½Π° опСрацията, Ρ‚ΠΎ трябва Π΄Π° промСнямС Ρ‚ΠΎΠ²Π° Π½Π° Π΅Π΄Π½ΠΎ място.

Π’ΠΎΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°ΠΆΠ΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ β€” Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ всички обяснСния ΠΏΠΎ SRP, ΠΊΠΎΠΈΡ‚ΠΎ бяха ΠΏΠΎ-Π³ΠΎΡ€Π΅, Π³ΠΎΠ²ΠΎΡ€Π΅Ρ…Π° Π·Π° Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ трябва Π΄Π° Ρ€Π°Π·Ρ‡ΡƒΠΏΠ²Π°ΠΌΠ΅ Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅ сС Ρ€Π°Π·Ρ‡ΡƒΠΏΠ²Π°Ρ‚, тоСст налагашС Β«ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π³ΠΎΡ€Π΅Β» Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π°, Π° сСга Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π²Π΅Ρ‡Π΅ ΠΈ Π·Π° Β«ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π΄ΠΎΠ»ΡƒΒ». Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, SRP Π½Π΅ само изисква Β«Π΄Π° сС Π΄Ρ€ΠΎΠ±ΠΈ, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ сС Π΄Ρ€ΠΎΠ±ΠΈΒ», Π½ΠΎ ΠΈ Π΄Π° Π½Π΅ сС прСкалявамС β€” Β«Π΄Π° Π½Π΅ Ρ€Π°Π·Π΄Ρ€ΠΎΠ±ΠΈΠΌ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ Π½Π΅Ρ‰Π°Β». Π’ΠΎΠ²Π° Π΅ Π²Π΅Π»ΠΈΠΊΠ°Ρ‚Π° Π±ΠΈΡ‚ΠΊΠ° Π½Π° Π±Ρ€ΡŠΡΠ½Π°Ρ‡Π° Π½Π° Оккам с Ρ‡ΠΎΠ²Π΅ΠΊΠ°-ΠΌΠ°ΠΉΠΌΡƒΠ½Π°!

Single Responsibility Principle. НС Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° прост, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°

Π‘Π΅Π³Π° Π½Π° пияницата Π±ΠΈ трябвало Π΄Π° станС ΠΏΠΎ-лСсно. ОсвСн Ρ‡Π΅ Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° сС раздробява Π»ΠΎΠ³Π΅Ρ€Π° 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

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

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

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

1) Π—Π°Π΄Π°ΠΉΡ‚Π΅ си Π²ΡŠΠΏΡ€ΠΎΡ β€” ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡ€Π°Π²ΠΈ Ρ‚ΠΎΠ·ΠΈ клас/ΠΌΠ΅Ρ‚ΠΎΠ΄/ΠΌΠΎΠ΄ΡƒΠ»/услуга. Врябва Π΄Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° Π½Π΅Π³ΠΎ с просто ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. (благодаря Brightori )

обяснСния

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

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

обяснСния

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

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

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

обяснСния

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

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

обяснСния

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

5) Π˜ΠΌΠ΅Π½ΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π΅ ясно.

обяснСния

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

AllManagersManagerService β€” вСроятно Π΅ God-клас.
LocalPayment β€” вСроятно, Π½Π΅.

Π€ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΡŠΠΌ 3. ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° β€žΠžΠΊΠΊΠ°ΠΌ-ΠΏΡŠΡ€Π²ΠΎβ€.

Π’ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ, Ρ‡ΠΎΠ²Π΅ΠΊ-обСзяна Π½Π΅ Π·Π½Π°Π΅ ΠΈ Π½Π΅ чувства всички нюанси Π½Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π° ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ°. Π“Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ:

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

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

Π’Ρ€Π΅ΠΌΠ΅ Π΅ Π΄Π° ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈΠΌ

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

Single Responsibility Principle. НС Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° прост, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°

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

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster