CLEAN CODE (principles, approaches)

1. What is clean code

Чистый ΠΊΠΎΠ΄ - ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ:

  • ВсС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ названия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (классов, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²) ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‡Π΅Ρ‚ΠΊΠΈΠ΅ названия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΈ Π·Π° Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚.

  • Чистый ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ. КаТдая функция Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π·Π°Π΄Π°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‡Π΅Ρ‚ΠΊΠΎ формируСтся Π² Π΅Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠΈ. Класс Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π½Π΅Π³ΠΎ. ВсС лишнСС Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π½ΠΎΡΠΈΡ‚ΡŒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ сущности. Чистый ΠΊΠΎΠ΄ содСрТит ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ классов ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… двиТущихся частСй

  • Π”ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌ, прост ΠΈ понятСн. Чистый ΠΊΠΎΠ΄ Π»Π΅Π³Ρ‡Π΅ ΠΈ дСшСвлС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ.

  • Чистый ΠΊΠΎΠ΄ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Unit тСсты ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡ…. Код Π±Π΅Π· тСстов Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½ чистым, ΠΊΠ°ΠΊΠΈΠΌ Π±Ρ‹ элСгантным ΠΎΠ½ Π½Π΅ Π±Ρ‹Π» Π±Ρ‹ ΠΈ ΠΊΠ°ΠΊ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π±Ρ‹ Π½Π΅ читался.

  • Код Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ошибок.

  • НС Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹

  • Код Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ написан Π² ΠΎΠ΄Π½ΠΎΠΌ стилС. НуТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Code Convention ΠΈ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΅Π³ΠΎ. Π­Ρ‚ΠΎ особСнно Π²Π°ΠΆΠ½ΠΎ, Ссли Π½Π°Π΄ Π½ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π°

  • ΠœΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Π² ΠΊΠΎΠ΄Π΅. Он Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ самодокумСнтованным, вСдь ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π½Π΅ ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡ€ΡƒΡŽΡ‚ ΠΏΠ»ΠΎΡ…ΠΎΠΉ ΠΊΠΎΠ΄

Чистый ΠΊΠΎΠ΄ достиТим, Π½ΠΎ стрСмлСниС ΠΊ Π½Π΅ΠΌΡƒ бСсконСчно.

2. What is code smells

Code smells (ΠΊΠΎΠ΄ с "запашком") - Π»ΡŽΠ±Ρ‹Π΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ Π² исходном ΠΊΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π­Ρ‚ΠΎ Π½Π΅ΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ€ ΠΎΠ±Ρ‰ΠΈΡ… ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ нСдостаточно Ρ…ΠΎΡ€ΠΎΡˆ, ΠΈ для Π΅Π³ΠΎ чистоты потрСбуСтся Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³:

  • Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ°

  • Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ, Π½Π΅Ρ‡Π΅Ρ‚ΠΊΠΈΠΉ Π½Π΅ΠΉΠΌΠΈΠ½Π³

  • Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ классы. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° такая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, Ρ‚ΠΎ создайтС для Π½Π΅Π΅ собствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄. Π˜Π΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· 4–20 строк. Если строк большС, Ρ‚ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠΈΡ‚Π΅ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΡ… Π½ΠΈΡ… Π² Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄. Π’ΠΎ ΠΆΠ΅ касаСтся ΠΈ классов: Ρ‡Π΅ΠΌ мСньшС, Ρ‚Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅. ОсобСнно, Ссли Π²Ρ‹ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° СдинствСнной отвСтствСнности.

  • Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π’ Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… списках ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ, ΠΎΠ½ΠΈ становятся ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²Ρ‹ΠΌΠΈ ΠΈ слоТными Π² использовании. ИспользованиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² позволяСт, Π² случаС измСнСния ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Работая с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, слСдуСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€ΠΎΠ²Π½ΠΎ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠ³ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΅ΠΌΡƒ Π΄Π°Π½Π½Ρ‹Π΅.

  • расходящиСся ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² систСмС Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ мСсто, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ. Π­Ρ‚ΠΎ являСтся слСдствиСм ΠΏΠ»ΠΎΡ…ΠΎΠΉ структурированности.

  • ΡΡ‚Ρ€Π΅Π»ΡŒΠ±Π° Π΄Ρ€ΠΎΠ±ΡŒΡŽ. Π­Ρ‚ΠΎ Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ПО. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π»ΡŽΠ±Ρ‹Ρ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΉ приходится Π²Π½ΠΎΡΠΈΡ‚ΡŒ мноТСство ΠΌΠ΅Π»ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² большоС число классов. Β«Π‘Ρ‚Ρ€Π΅Π»ΡŒΠ±Π° Π΄Ρ€ΠΎΠ±ΡŒΡŽΒ» ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° Β«Π Π°ΡΡ…ΠΎΠ΄ΡΡ‰ΡƒΡŽΡΡ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽΒ», Π½ΠΎ являСтся Π΅Ρ‘ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ. Расходящаяся модификация ΠΈΠΌΠ΅Π΅Ρ‚ мСсто, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ класс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ производится ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π° Β«Π‘Ρ‚Ρ€Π΅Π»ΡŒΠ±Π° Π΄Ρ€ΠΎΠ±ΡŒΡŽΒ» β€” это ΠΎΠ΄Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ ΠΌΠ½ΠΎΠ³ΠΎ классов.

  • Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ "завистливых" Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠœΠ΅Ρ‚ΠΎΠ΄ обращаСтся ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‡Π°Ρ‰Π΅, Ρ‡Π΅ΠΌ ΠΊ собствСнным Π΄Π°Π½Π½Ρ‹ΠΌ.

  • Π½Π΅ слСдованиС KISS, DRY, YAGN, SOLID.

3. What is anti patterns

Π­Ρ‚ΠΎ ΡƒΠΌΠ΅Π½ΠΈΠ΅ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π² Π΄ΠΈΠ·Π°ΠΉΠ½Π΅, ΠΊΠΎΠ΄Π΅, процСссах ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ. Π—Π½Π°Π½ΠΈΠ΅ ΠΎ Π²Ρ€Π΅Π΄Π½Ρ‹Ρ… ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ

Copy and Paste Programming

Π‘Π°ΠΌΡ‹ΠΉ ΠΌΠ°Ρ…Ρ€ΠΎΠ²Ρ‹ΠΉ ΠΈΠ· всСх Π°Π½Ρ‚ΠΈ-ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ².

Когда ΠΎΠ½ проявляСтся Когда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ трСбуСтся Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π΅ схоТих Π·Π°Π΄Π°Ρ‡ΠΈ, самым простым Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Ρ‡Π°Ρ‰Π΅ всСго ΠΎΠ½ Π²ΠΈΠ΄ΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ, Π΅Ρ‘ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ внСсСниС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ измСнСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ.

КакиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ нСсёт

  1. Π£Ρ…ΡƒΠ΄ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС ΠΊΠΎΠ΄Π° β€” Ссли потрСбуСтся подобная Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ‡Π»Π΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ΡŒ Π΅Π³ΠΎ.

  2. ΠŸΠΎΠ½ΠΈΠΆΠ°Π΅Ρ‚ΡΡ качСство ΠΊΠΎΠ΄Π° β€” часто Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ Π½Π΅Π΄ΠΎΡ‡Ρ‘Ρ‚Ρ‹ Π² ΠΊΠΎΠ΄Π΅ правятся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… нСдостатки ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ.

  3. УслоТняСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΊΠΎΠ΄Π° β€” Π² случаС, Ссли Π² ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π±Ρ‹Π»Π° ошибка, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, Ρ‚ΠΎ эта ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ошибка ΠΏΠΎΠΏΠ°Π»Π° Π²ΠΎ всС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, ΠΊΡƒΠ΄Π° копировался ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ нСобходимости Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ мноТСствСнныС исправлСния Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ….

  4. Code Review Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ услоТняСтся, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ приходится Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±Π·ΠΎΡ€ фактичСски ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠΎΠ΄Π° Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Π±Π΅Π· Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π²Ρ‹Π³ΠΎΠ΄Ρ‹ ΠΈ роста ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚Ρ€ΡƒΠ΄Π°.

Boat anchor

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… частСй ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ послС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°.

Когда ΠΎΠ½ проявляСтся

  1. ПослС Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ части ΠΊΠΎΠ΄Π° ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π² систСмС, хотя ΠΎΠ½ΠΈ ΡƒΠΆΠ΅ большС Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

  2. ΠŸΡ€ΠΈ сохранСнии части ΠΊΠΎΠ΄Π° Β«Π½Π° Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅Β», Π½Π° случай, Ссли придётся Π΅Ρ‰Ρ‘ Ρ€Π°Π· ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

КакиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ нСсёт Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ услоТняСт Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π½Π΅ нСся Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ практичСской цСнности.

Hard code

Π₯Π°Ρ€Π΄-ΠΊΠΎΠ΄ β€” фиксация Π² ΠΊΠΎΠ΄Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ± ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ.

НапримСр: ΠΏΡƒΡ‚ΠΈ ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ, ΠΈΠΌΠ΅Π½Π° процСссов, устройств ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Когда ΠΎΠ½ проявляСтся Π­Ρ‚ΠΎΡ‚ Π°Π½Ρ‚ΠΈ-ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ тСсно связан с магичСскими числами, часто ΠΎΠ½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠ»Π΅Ρ‚Π°ΡŽΡ‚ΡΡ.

КакиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ нСсёт

  1. Код Π±ΡƒΠ΄Π΅Ρ‚ исправно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ вСдётся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.

  2. ΠœΠΎΠΆΠ΅Ρ‚ проявляСтся нСпрСдсказуСмыС Π΄Π΅Ρ„Π΅ΠΊΡ‚Ρ‹ Π²ΠΎ врСмя пСрСмСщСния, пСрСимСнования Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈ ΠΈΡ… ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ измСнСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ устройств.

Soft code

Π‘ΠΎΡ„Ρ‚-ΠΊΠΎΠ΄ β€” ΠΏΠ°Ρ€Π°Π½ΠΎΠΈΠ΄Π°Π»ΡŒΠ½Π°Ρ боязнь Ρ…Π°Ρ€Π΄-ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎΡ‚ Π°Π½Ρ‚ΠΈ-ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ являСтся Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΊΠΎΠ½Ρ†ΠΎΠΌ ΠΏΠ°Π»ΠΊΠΈ ΠΎ Ρ…Π°Ρ€Π΄-ΠΊΠΎΠ΄Π΅ ΠΈ поэтому Ρ‚ΠΎΠΆΠ΅ являСтся опасным.

Когда ΠΎΠ½ проявляСтся Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ настраиваСтся Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ всё, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ нСвСроятно слоТной ΠΈ Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠΉ.

КакиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ нСсёт

  1. ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ рСсурсов ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ возмоТности настроСк Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ всСго.

  2. Π Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠΉ систСмы Π²Π»Π΅Ρ‡Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹.

Π—ΠΎΠ»ΠΎΡ‚ΠΎΠΉ ΠΌΠΎΠ»ΠΎΡ‚ΠΎΠΊ

ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠ΄Π°.

Когда ΠΎΠ½ проявляСтся ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ (Ρ‡Π°Ρ‰Π΅ всСго ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ шаблона проСктирования) для всСх Π·Π°Π΄Π°Ρ‡.

КакиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ нСсёт МногиС программисты ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Π°Π½Π½Ρ‹ΠΉ Π°Π½Ρ‚ΠΈ-ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Π½Π΅ подозрСвая ΠΎ собствСнной нСкомпСтСнтности, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ остановкС саморазвития.

ΠœΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ числа

Π­Ρ‚ΠΎ числовыС значСния, Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π² ΠΊΠΎΠ΄Π΅, Π½ΠΎ ΠΏΡ€ΠΈ этом Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚. Π”Π°Π½Π½Ρ‹ΠΉ Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ затрудняСт ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ услоТняСт Π΅Ρ‘ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ слоТности Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ магичСскоС число. Π­Ρ‚ΠΎ нСльзя ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠ·Π°ΠΌΠ΅Π½ΠΎΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ число ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ, Π° Π·Π½Π°Ρ‡ΠΈΡ‚, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ участок ΠΊΠΎΠ΄Π°, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ это число.

ΠŸΠ»ΡŽΡΡ‹:

  • Бимвольная константа ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ ΠΆΠΈΠ²ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ смысла значСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² Π½Π΅ΠΉ хранится.

  • Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ константы Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Ρ‡Π΅ΠΌ ΠΈΡΠΊΠ°Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎΠ΅ число ΠΏΠΎ всСму ΠΊΠΎΠ΄Ρƒ, ΠΏΡ€ΠΈ этом рискуя Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ число, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ случаС использовалось для Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ.

ΠŸΡ€Π΅ΠΆΠ΄Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ оптимизация

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ, проводимая Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρƒ вас Π΅ΡΡ‚ΡŒ вся информация, нСобходимая для принятия Π²Π·Π²Π΅ΡˆΠ΅Π½Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ Ρ‚ΠΎΠ³ΠΎ, Π³Π΄Π΅ ΠΈ ΠΊΠ°ΠΊ Π½ΡƒΠΆΠ½ΠΎ Π΅Ρ‘ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ.

Как ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΠΈΡˆΠΈΡ‚Π΅ чистый, Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ извСстныС ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈ инструмСнты. ΠŸΡ€ΠΈ нСобходимости ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ инструмСнты для профилирования для поиска ΡƒΠ·ΠΊΠΈΡ… мСст. ΠŸΠΎΠ»Π°Π³Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° измСрСния, Π° Π½Π΅ Π½Π° Π΄ΠΎΠ³Π°Π΄ΠΊΠΈ ΠΈ прСдполоТСния. НС мСняйтС простоту Π½Π° ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ, ΠΏΠΎΠΊΠ° ΠΎΠ± этом Π½Π΅ заявят эмпиричСски ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

Π’ Ρ‡Ρ‘ΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° оптимизация Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΆΠ΄Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π’Π°ΠΆΠ½ΠΎ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ мСсто для роста. НуТно Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволят Π»Π΅Π³ΠΊΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ расти. Π’Π°ΠΊΠΆΠ΅ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅ΠΆΠ΄Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ Π² качСствС оправдания Π·Π° ΠΏΠ»ΠΎΡ…ΠΎΠΉ ΠΊΠΎΠ΄. НапримСр, использованиС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° O(n2) просто ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ O(n) слоТнСС.

Класс Π‘ΠΎΠ³Π°

ΠšΠ»Π°ΡΡΡ‹, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… классов, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ зависимостСй ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ отвСтствСнности.

Π’ Ρ‡Π΅ΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, запросы ΠΈ количСство программистов растСт, ΠΈ малСнькиС спСциализированныС классы ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² классы Π‘ΠΎΠ³Π°. Π Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ Ρ‚Π°ΠΊΠΈΡ… классов ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒ впослСдствии ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Как ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π Π°Π·Π±ΠΈΠ²Π°ΠΉΡ‚Π΅ ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎ ΠΌΠ΅Π»ΠΊΠΈΠΌ классам, с СдинствСнной ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ, которая Ρ‡Ρ‘Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°, ΡŽΠ½ΠΈΡ‚-тСстируСтся ΠΈ Π·Π°Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π°.

Π‘Ρ‚Ρ€Π°Ρ… ΠΏΠ΅Ρ€Π΅Π΄ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ классов

Π’Π΅Ρ€Π° Π² Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ количСства классов услоТняСт Π΄ΠΈΠ·Π°ΠΉΠ½, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ страху ΠΏΠ΅Ρ€Π΅Π΄ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ²Ρ‹Ρ… классов ΠΈΠ»ΠΈ Ρ€Π°Π·Π±ΠΈΡ‚ΠΈΠ΅ΠΌ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… классов Π½Π° ΠΌΠ΅Π»ΠΊΠΈΠ΅.

Π’ Ρ‡Π΅ΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ классов ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ. Π Π°ΡΠΏΡƒΡ‚Π°Ρ‚ΡŒ нСсколько ΠΌΠ΅Π»ΠΊΠΈΡ… ΠΊΠ»ΡƒΠ±ΠΊΠΎΠ² пряТи ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΉ. НСсколько простых Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ классов ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ большого ΠΈ слоТного класса со мноТСством зависимостСй (класс Π‘ΠΎΠ³Π°). Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ классов – Π½Π΅ панацСя. Π£ΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ Π΄ΠΈΠ·Π°ΠΉΠ½Π° Ρ€Π°Π·Π±ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… классов Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° областСй отвСтствСнности ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ.

Как ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π—Π°ΠΌΠ΅Ρ‡Π°ΠΉΡ‚Π΅ Ρ‚Π΅ мСста, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ классов ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Π΄ΠΈΠ·Π°ΠΉΠ½ ΠΈ Ρ€Π°Π·Ρ€ΡƒΠ±Π°ΠΉΡ‚Π΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ связи ΠΌΠ΅ΠΆΠ΄Ρƒ частями ΠΊΠΎΠ΄Π°.

БСсполСзныС (полтСргСйстныС) классы

БСсполСзныС классы Π±Π΅Π· зависимостСй, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса ΠΈΠ»ΠΈ просто Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΉ слой абстракции.

Π’ Ρ‡Ρ‘ΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд, совСт Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ совСту Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«Π‘Ρ‚Ρ€Π°Ρ… ΠΏΠ΅Ρ€Π΅Π΄ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ классов». Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° класс выполняСт Ρ†Π΅Π½Π½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π΄ΠΈΠ·Π°ΠΉΠ½, Π° ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ бСсполСзным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ.

Как ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ НС ΠΏΠΈΡˆΠΈΡ‚Π΅ бСсполСзныС классы ΠΈ ΠΈΠ·Π±Π°Π²Π»ΡΠΉΡ‚Π΅ΡΡŒ ΠΎΡ‚ Π½ΠΈΡ… ΠΏΡ€ΠΈ возмоТности.

More info:

4. Best practices (KISS, DRY, YAGNI). Good Software principles

DRY (Don’t Repeat Yourself)

это ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, Π½Π°Ρ†Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π½Π° сниТСниС повторСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π°, особСнно Π² систСмах со мноТСством слоёв абстрагирования.

Π˜Π·Π±Π΅Π³Π°Ρ‚ΡŒ повторСния. If some code fragment is duplicated in several places inside a program, there is a high probability of two catastrophic situations:

  1. When making even small changes to the source code, you need to change the same code in several places. It will require additional time, effort and attention(often it is not easy).

  2. The first item follows the second one. You or another developer from your team may accidentally miss one of the changes(it can happen simply by merging branches in vcs) and face the subsequent bugs in the application. These bugs can be frustrating to you because you have heard that such a bug has already been fixed.

  3. ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° => ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π±Π°Π½Π΄Π»ΠΎΠ² => perfomans => user experience => ΠΎΡ‚ΠΊΠ»ΠΈΠΊ сайта => ΡŽΠ·Π΅Ρ€ 5 сСк Π½Π° стр находится. Π£Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ ΡŽΠ·Π΅Ρ€ΠΎΠ²

KISS (Keep it simple, stupid!)

НС услоТняй, Ρ‚ΡƒΠΏΠΈΡ†Π°. это ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ проСктирования ΠΈ программирования, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ простота систСмы дСкларируСтся Π² качСствС основной Ρ†Π΅Π»ΠΈ ΠΈΠ»ΠΈ цСнности

Π£ΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ (ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ слоТности) всСгда Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Ρ†Π΅Π»ΡŒΡŽ. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΊΠΎΠ΄ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ мСньшС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ, ΠΈΠΌΠ΅Π΅Ρ‚ мСньшС ошибок, ΠΈ Π΅Π³ΠΎ Π»Π΅Π³Ρ‡Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ.

This principle says that the code must be as simple as possible without complex structures, otherwise it will complicate debugging and maintenance of the code. Besides, it will be more difficult for another programmer to understand the code's logic, which in its turn will also require additional time and effort.

By doing this, you will make life easier for yourself and your colleagues, because complexity generates bugs.

+ ускорСнный ΠΎΠ½Π±ΠΎΠ°Ρ€Π΄ΠΈΠ½Π³ =>

YAGNI (You aren’t going to need it)

_ это процСсс ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ проСктирования ПО, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π² качСствС основной Ρ†Π΅Π»ΠΈ ΠΈ/ΠΈΠ»ΠΈ цСнности дСкларируСтся ΠΎΡ‚ΠΊΠ°Π· ΠΎΡ‚ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, β€” Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΡ‚ΠΊΠ°Π· добавлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π΅Ρ‚ нСпосрСдствСнной надобности.

Π’Π°ΠΌ стоит ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠΎΠΊΠ° ΠΎΠ½Π° Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Π°. Волько ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚Π΅ врСмя Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ постоянно ΠΌΠ΅ΡˆΠ°Ρ‚ΡŒΡΡ.

The desire to implement at once all the necessary (and sometimes even unnecessary) functionality from the very beginning of the project. That is, when a developer adds all the possible methods to the class from the very beginning and implements them, and may even never use them in the future. Thus, according to this recommendation, first of all, implement only what you need, and later, if necessary, extend the functionality.

Code review

_ это систСматичСская ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° исходного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Ρ†Π΅Π»ΡŒΡŽ обнаруТСния ΠΈ исправлСния ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Π½Π΅Π·Π°ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΌΠΈ Π² Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Ρ„Π°Π·Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ - ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ => ΠΊΠΎΠΌΠ°Π½Π΄Π° + Ρ€Π΅Π²ΡŒΡŽΠ²Π΅Ρ€Ρ‹ со стороны Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠΎΠ² => prod. Code review’s purpose is to find and fix overlooked mistakes and to improve the overall quality and security of software. Advantages:

  • Members of your team can learn from each other by reviewing each other's code.

  • A general analysis report says that if you review at an earlier stage, the cost to fix this will be lower and thus it will reduce the overall cost of the application.

  • Code reviews will decrease the number of those bugs that make it to production.

  • Things like readability, efficiency, and maintainability of your code may not always directly affect your users but they are tremendously important for your project in the long run.

  • Code reviews also make it easy to spot potential vulnerabilities and to fix them before they make their way to your servers.

The following points should be checked:

  • Readability

  • Functional correctness

  • Completeness

  • Hidden implications

  • Coding standards, code guide (arnbn)

  • Tests

SOLID

Solid - ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² написания чистого ΠΈ доступного ΠΊΠΎΠ΄Π°, прСдставлСнный 5-ю ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ(ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌΠΈ).

Solid ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² модулях. ΠœΠΎΠ΄ΡƒΠ»Π΅ΠΌ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, ΠΎΠ±ΠΎΡΠΎΠ±Π»Π΅Π½Π½ΡƒΡŽ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ…. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ класс, функция, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ„Π°ΠΉΠ» β€” Π² ΠΎΠ±Ρ‰Π΅ΠΌ, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρƒ Ρ‡Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹, ΠΎΡ‚Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ этот ΠΊΠΎΠ΄ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ.

S-ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ СдинствСнной отвСтствСнности

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ класс Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ лишь ΠΎΠ΄Π½Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ. ΠžΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρƒ модуля Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° для измСнСния.

Основной инструмСнт ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° β€” ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ Ρ‚Π΅ части, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π΅Π΄ΠΈΠ½ΠΎΠΉ отвСтствСнности:

  • ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒ;

  • ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ количСство ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π΄ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ;

  • ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ влияниС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, помогая ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ систСмы.

O-ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ открытости-закрытости

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ сущности (классы, ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, Π½ΠΎ Π½Π΅ для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами β€” ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… нСльзя Π±Ρ‹Π»ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ, Π° новая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ лишь с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ создания Π½ΠΎΠ²Ρ‹Ρ… сущностСй ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΈΡ… со старыми.

Основная Ρ†Π΅Π»ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° β€” ΠΏΠΎΠΌΠΎΡ‡ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, устойчивый ΠΊ измСнСниям, срок ΠΆΠΈΠ·Π½ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ срок сущСствования ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсии ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ открытости-закрытости:

  • заставляСт ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π΄Π΅Π»Π°Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ Π²Π΅Ρ‰ΡŒ ΠΈ Π΄Π΅Π»Π°Π»ΠΈ Π΅Ρ‘ Ρ…ΠΎΡ€ΠΎΡˆΠΎ;

  • ΠΏΠΎΠ±ΡƒΠΆΠ΄Π°Π΅Ρ‚ ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ сущности Ρ‡Π΅Ρ€Π΅Π· абстракции (Π° Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ) Ρ‚Π°ΠΌ, Π³Π΄Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ бизнСс-трСбования;

  • ΠΎΠ±Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠ² Π½Π° мСста стыка ΠΈ взаимодСйствиС сущностСй;

  • позволяСт ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ количСство ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ бизнСс-Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ;

  • Π΄Π΅Π»Π°Π΅Ρ‚ внСсСниС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ бСзопасным ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Π΅ΡˆΡ‘Π²Ρ‹ΠΌ.

L-ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ подстановки Π‘Π°Ρ€Π±Π°Ρ€Ρ‹ Лисков

НСобходимо, Ρ‡Ρ‚ΠΎΠ±Ρ‹ подклассы ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ Π·Π°ΠΌΠ΅Π½ΠΎΠΉ для своих супСрклассов. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΡ‹ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½Π΅ зная ΠΎΠ± этом.

ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами β€” классы-наслСдники Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΡ‚ΡŒ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡƒ классу. НапримСр, ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ интСрфСйс Γ½ΠΆΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ. ПовСдСниС наслСдников Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΌ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс.

НаслСдуСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ вСсти сСбя Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ (повСдСнчСская ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ).

I-ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ раздСлСния интСрфСйса

Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡ‚Π΅ узкоспСциализированныС интСрфСйсы, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ интСрфСйсов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚.

Бущности Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ интСрфСйсов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚.

Когда ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ΡΡ, ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ всСм измСнСниям Π² интСрфСйсах, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ΠΈ зависят. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ высокой связанности ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ.

ISP ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйсы Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ измСнСния Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π»ΠΈΡΡŽΡ‚. Π§Π°Ρ‰Π΅ всСго это заставляСт интСрфСйсы Π΄Ρ€ΠΎΠ±ΠΈΡ‚ΡŒ (Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ).

Π’ js Π½Π΅Ρ‚ интСрфСйсов, Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρ‹.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ раздСлСния интСрфСйса:

  • ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π±ΠΎΡ€ΠΎΡ‚ΡŒΡΡ с наслСдованиСм ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ;

  • Π΄Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π»ΠΈ измСнСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅Ρ… интСрфСйсов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚;

  • сниТаСт сцСплСниС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ;

  • ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚ наслСдованиС Ρ€Π°Π΄ΠΈ наслСдования, поощряСт использованиС ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ;

  • позволяСт Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ высокиС абстракции ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Π΅ связи ΠΌΠ΅ΠΆΠ΄Ρƒ сущностями.

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹: Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· Π΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ использованиС шаблона проСктирования ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ АдаптСр. АдаптСр β€” это структурный ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ проСктирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ с нСсовмСстимыми интСрфСйсами Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ вмСстС.

ΠœΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ SoundEmitter ΠΈ TimeInterval нСпосрСдствСнно Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Ρ‡Π΅Ρ€Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ слой (Π°Π΄Π°ΠΏΡ‚Π΅Ρ€), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сообщСния ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ сущности Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· мноТСствСнноС наслСдованиС Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ IntervalSoundEmitter Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ TimeInterval ΠΈ ΠΎΡ‚ SoundEmitter. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΎΡ‚Π²ΡΠ·Π°Ρ‚ΡŒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ классы Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² классС IntervalSoundEmitter Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΡƒΠΆΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

D-ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ инвСрсии зависимостСй

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ инвСрсии зависимостСй ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ:

  • ВысокоуровнСвыС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ…; ΠΎΠ±Π° Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ абстракций.

  • Абстракции Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ, Π΄Π΅Ρ‚Π°Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ абстракций(прослойки Π² Π²ΠΈΠ΄Π΅ интСрфСйса).

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ инвСрсии зависимостСй:

  • Π²Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈ ограничСния для зависимости ΠΎΠ΄Π½ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ…;

  • сниТаСт сцСплСниС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ;

  • Π΄Π΅Π»Π°Π΅Ρ‚ тСстированиС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΏΡ€ΠΎΡ‰Π΅;

  • позволяСт ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ систСму Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π±Ρ‹Π»ΠΈ замСняСмы Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

Когда ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Тёстко сцСплСны, ΠΎΠ½ΠΈ слишком ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ ΠΎ Π΄Ρ€ΡƒΠ³Π΅ ΠΈ Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‚ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’ Ρ‚Π°ΠΊΠΎΠΉ ситуации измСнСния Π² ΠΎΠ΄Π½ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… β€” Ρ‡Ρ‚ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ OCP.

Π‘Ρ†Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ β€” ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ взаимозависимости Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Π§Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ сцСплСниС, Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ…Ρ€ΡƒΠΏΠΊΠΎΠΉ получаСтся систСма, ΠΈ Ρ‚Π΅ΠΌ слоТнСС Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния.

Π‘Π²ΡΠ·Π½ΠΎΡΡ‚ΡŒ β€” ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ модуля, связаны Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Π§Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒ, Ρ‚Π΅ΠΌ строТС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ SRP, Ρ‚Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ сфокусирован ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅.

Last updated

Was this helpful?