Srp Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅

Srp Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅

Secure Remote Password Protocol (SRPP) β€” ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΏΠ°Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, устойчивый ΠΊ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΡŽ ΠΈ MITM-Π°Ρ‚Π°ΠΊΠ΅ ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ Π΄ΠΎΠ²Π΅Ρ€Π΅Π½Π½ΠΎΠΉ стороны. SRP содСрТит Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ элСмСнты ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² ΠΎΠ±ΠΌΠ΅Π½Π° ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈ этом вносит нСбольшиС ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΡ ΠΈ уточнСния. ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» сохраняСт ΡΡ‚ΠΎΠΉΠΊΠΎΡΡ‚ΡŒ ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² класса Encrypted key exchange, ΠΏΡ€ΠΈ этом избавляясь ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡ… нСдостатков.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ΠžΠ±Π·ΠΎΡ€

ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» SRP позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСбя Π½Π° сСрвСрС, ΠΏΡ€ΠΈ этом Π½Π΅ пСрСдавая своСго пароля, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π·Π½Π°Π΅Ρ‚ свой ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ этот Ρ„Π°ΠΊΡ‚. Он ΠΈΠΌΠ΅Π΅Ρ‚ ряд ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… качСств:

SRP эффСктивно Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π”ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Ρ€Π°Π·Π³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈ сСрвСром, хранящим ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π΅Π³ΠΎ ΠΏΠ°Ρ€ΠΎΠ»Π΅. ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΠΈ Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° вСрсия пароля, начиная с вСрсии 6 Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π΅Π²ΠΈΠ·ΠΈΠΉ, Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ послСдняя рСвизия β€” 6a.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΎΠ±Π΅ стороны ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ сСкрСтный ΠΊΠ»ΡŽΡ‡, провСряСмый Π½Π° соотвСтствиС ΠΌΠ΅ΠΆΠ΄Ρƒ сторонами послС получСния. Π’ случаях, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠΌΠΈΠΌΠΎ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, SRP прСдоставляСт Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹Π΅, Ρ‡Π΅ΠΌ SSH, ΠΈ Π±ΠΎΠ»Π΅Π΅ быстрыС, Ρ‡Π΅ΠΌ Deffie-Hellman, срСдства для достиТСния этой Ρ†Π΅Π»ΠΈ. ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» SRP вСрсии 3 описываСтся Π² RFC 2945. SRP вСрсии 6 Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² SSL/TLS ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… стандартах, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ EAP ΠΈ SAML, ΠΈ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ стандартизуСтся IEEE P1363 ΠΈ ISO/IEC 11770-4.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π’Π²Π΅Π΄Π΅ΠΌ обозначСния, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для рассуТдСния:

ΠŸΠΎΠ½ΡΡ‚ΠΈΡ пароля ΠΈ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ общСпринятым понятиям сСкрСтного ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, с двумя ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΊΠ°ΠΌΠΈ: ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, мСньшС сСкрСтного ΠΊΠ»ΡŽΡ‡Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρƒ Π½Π΅Π³ΠΎ нСбольшого Ρ€Π°Π·ΠΌΠ΅Ρ€Π°; Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎ матСматичСским свойствам схоТ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π»Π΅Π³ΠΊΠΎ получаСтся ΠΈΠ· пароля, Π° обратная опСрация являСтся Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌΠΎΠΉ. Однако вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ общСизвСстным, Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ хранится сСрвСром Π² Ρ‚Π°ΠΉΠ½Π΅. Бпособ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ сСрвСром Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, Π½ΠΎ Π½Π΅ пароля, называСтся основанным Π½Π° Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ(verifier-based).

Из исходных ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ A,B (см. Π½ΠΈΠΆΠ΅). Π‘Π΅Ρ€Π²Π΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ:

ПослС этого сСрвСр Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΏΠ°Ρ€Ρƒ (I, s, v) Π² своСй Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. АутСнтификация происходит ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ схСмС:

На сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°:

На сторонС сСрвСра:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±Π΅ стороны ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠΉ сСкрСтный ΠΊΠ»ΡŽΡ‡ K. Для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΈΡ… ΠΊΠ»ΡŽΡ‡ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚. Один ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… способов:

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²

Π Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ простых Ρ‚ΠΈΠΏΠ°Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ ΠΈΡ… уязвимостях Π² сравнСнии с Π΄Π°Π½Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ прСимущСства SRP.

Π‘Π°ΠΌΡ‹ΠΉ простой способ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ β€” ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π½Π΅Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ пароля ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊ сСрвСру, послС Ρ‡Π΅Π³ΠΎ сСрвСр сравниваСт ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΈΠ»ΠΈ Π΅Π³ΠΎ Ρ…Π΅Ρˆ с элСмСнтом Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ нСдостаток β€” ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΡŽ.

ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ с запросом ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ (challenge-responce), Π³Π΄Π΅ ΠΎΠ±ΠΌΠ΅Π½ происходит Ρ‚Π°ΠΊ:

послС этого ΠΊΠ»ΠΈΠ΅Π½Ρ‚ вычисляСт Ρ…Π΅Ρˆ ΠΎΡ‚ Ρ‚Ρ€Π΅Ρ… Π²Π΅Π»ΠΈΡ‡ΠΈΠ½: r, c, password, ΠΈ посылаСт Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ уязвим ΠΊ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Ρƒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ, имСя r, c, hash, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

Анализируя ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΉΡ‚ΠΈ ΠΊ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½ ΠΈ ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ΠΏΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ. БСмСйство Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² называСтся Encrypted key exchange (EKE). Π‘ΡƒΡ‚ΡŒ этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π΅ стороны Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ свои ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ для асиммСтричного ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ, ΠΈ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ симмСтричного Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ извСстный ΠΎΠ±ΠΎΠΈΠΌ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡. Π”Π°Π½Π½ΠΎΠ΅ сСмСйство ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ распространСниС, с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ модификациями, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ свойства:

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ всСх ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… уязвимостСй ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ с Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° концСпция AKE (Asymmetric key exchange), ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰Π°ΡΡΡ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π΄Π°Π½Π½Ρ‹Ρ… отсутствуСт всякоС ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ избавляСт систСму ΠΎΡ‚ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… Π·Π°Ρ‚Ρ€Π°Ρ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ мощности ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… уязвимостСй ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ. Одной ΠΈΠ· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ AKE ΠΈ являСтся SRP.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Software Restriction Policies

ВСхничСский справочник ΠΏΠΎ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°ΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (Windows Server 2003)РазвСртываниСДоступныС рСсурсы ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚.ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΠ°Π΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (Windows Server 2012)

Π‘ΠΏΡ€Π°Π²ΠΊΠ° ΠΏΠΎ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°ΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (Windows Server 2003)УстранСниС нСполадокустранСниС Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (Windows Server 2012)

Диагностика ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (Windows Server 2003)Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΠ£Π³Ρ€ΠΎΠ·Ρ‹ ΠΈ противодСйствия для ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (Windows Server 2008)

Π£Π³Ρ€ΠΎΠ·Ρ‹ ΠΈ противодСйствия для ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (Windows Server 2008 R2)БрСдства ΠΈ парамСтрыБрСдства ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (Windows Server 2003)РСсурсы сообщСстваБлокировка прилоТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

ΠžΠ±Π»Π°ΡΡ‚ΡŒ примСнСния: Windows Server 2022, Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012

Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ для ΠΈΡ‚-спСциалистов ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (srp) Π² Windows Server 2012 ΠΈ Windows 8, Π° Ρ‚Π°ΠΊΠΆΠ΅ ссылки Π½Π° тСхничСскиС свСдСния ΠΎ Π½Π°Π±ΠΎΡ€Π΅ исправлСний бСзопасности, начиная с Windows Server 2003.

ОписаниС ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

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

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΌΠΈ ограничСниями для ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ², Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ запуск Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ со слуТбой Microsoft Active Directory ΠΈ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ. ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π° ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…. Они ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°ΠΌΠΈ довСрия, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΏΡ€Π°Π²ΠΈΠ»Π°, устанавливаСмыС администратором, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ сцСнариСв ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ довСрия.

Π”Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΈΠ»ΠΈ оснастки Microsoft Management Console (MMC) «Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ бСзопасности».

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ свСдСния ΠΎ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ВСхничСский ΠΎΠ±Π·ΠΎΡ€ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅

Администраторы ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π°Π΄Π°Ρ‡:

ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄;

Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π³ΠΈΠ±ΠΊΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ для рСгулирования Ρ€Π°Π±ΠΎΡ‚Ρ‹ сцСнариСв, исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ элСмСнтов ActiveX.

ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой ΠΈ прилоТСниями (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для создания сцСнариСв), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚.

Π’ частности, администраторы ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… цСлях:

ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС (исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°Ρ…;

Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… с ΠΎΠ±Ρ‰ΠΈΠΌ доступом;

ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π΄ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… ΠΈΠ·Π΄Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°Ρ…;

ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Π±ΡƒΠ΄ΡƒΡ‚ Π»ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°Ρ…);

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

НовыС ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ измСнСния Π² ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚.

Π£Π΄Π°Π»Π΅Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ возмоТности

Π£Π΄Π°Π»Π΅Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚.

ВрСбования ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌΡƒ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡŽ

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ для ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ доступно Ρ‡Π΅Ρ€Π΅Π· консоль управлСния (MMC).

Для создания ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° локальном ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ

Authenticode ΠΈ WinVerifyTrust

Если ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π²Ρ‹Π·ΠΎΠ²Ρ‹ для развСртывания этих ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ Π² Π΄ΠΎΠΌΠ΅Π½Π΅, ΠΊ Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΠΎΠΌΡƒ списку потрСбуСтся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

Π”ΠΎΠΌΠ΅Π½Π½Ρ‹Π΅ слуТбы Active Directory

БвСдСния ΠΎ диспСтчСрС сСрвСра

ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΈ Π½Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡƒΠ½ΠΊΡ‚Π° «Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ€ΠΎΠ»ΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹» диспСтчСра сСрвСров.

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ содСрТатся ссылки Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ рСсурсы, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для понимания ΠΈ примСнСния ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Многоликий ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ СдинствСнности отвСтствСнности

ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, любой «ΡΠΎΠ»ΠΈΠ΄Π½Ρ‹ΠΉ» программист Π·Π½Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ SOLID Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ СдинствСнности отвСтствСнности (SRP) Π² частности.

Π‘ΠΏΠΎΠΉΠ»Π΅Ρ€, Ссли Π²Π΄Ρ€ΡƒΠ³ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅

Single Responsibility Principle: A module should have one, and only one, reason to change.

Open/Closed Principle:: A software artifact should be open for extension but closed for modification.

Liskov Substitution Principle:: What is wanted here is something like the following substitution property: If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T

Interface Segregation Principle:: Clients should not be forced to depend upon interfaces that they do not use.

Dependency Inversion Principle::

High level modules should not depend upon low level modules. both should depend upon abstractions.

Abstractions should not depend upon details. details should depend upon abstractions.

Когда Ρ€Π΅Ρ‡ΡŒ Π·Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΎΠ± SRP, я всСгда ΡƒΡ‚ΠΎΡ‡Π½ΡΡŽ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π²Π²ΠΈΠ΄Ρƒ ΠΌΠΎΠΉ собСсСдник. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρƒ SRP сущСствуСт ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΏΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΈ Ρ‚Ρ€ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ. И я Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ подобная эмм…​ ΡˆΡ‚ΡƒΠΊΠΎΠ²ΠΈΠ½Π° являСтся Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ руководством ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ПО.

Π€ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠΈ SRP

Для Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ Π½Π΅Π²Π΅Ρ€Π½ΡƒΡŽ, Π½ΠΎ ΡΠ°ΠΌΡƒΡŽ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΡƒ:

Класс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ Π²Π΅Ρ‰ΡŒ

ΠšΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‚ΠΎΡ€ΠΈΡ‚ ΠΈ русская википСдия:

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ класса Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ СдинствСнноС Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ВсС рСсурсы, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для Π΅Π³ΠΎ осущСствлСния, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ инкапсулированы Π² этот класс ΠΈ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ этой Π·Π°Π΄Π°Ρ‡Π΅.

Π₯отя английская вСрсия Ρ‚ΠΎΠΉ ΠΆΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠœΠ°Ρ€Ρ‚ΠΈΠ½Π°.

It is too easy for programmers to hear the name and then assume that it means that every module should do just one thing.

Make no mistake, there is a principle like that. […​] But it is not one of the SOLID principles β€” it is not the SRP.

β€” Robert C. Martin, Clean Architecture

Π‘Π°ΠΌ ΠœΠ°Ρ€Ρ‚ΠΈΠ½ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ SRP трСмя Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами:

Π€ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° 2003 Π³ΠΎΠ΄Π°

The Single Responsibility Principle (SRP) states that a class or module should have one, and only one, reason to change

β€” Robert C. Martin, Agile software development Principles Patterns and Practices

Π€ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° 2014 Π³ΠΎΠ΄Π°

Gather together the things that change for the same reasons. Separate those things that change for different reasons.

β€” Robert C. Martin, The Single Responsibility Principle

Π€ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° 2018 Π³ΠΎΠ΄Π°

A module should be responsible to one, and only one, actor

β€” Robert C. Martin, Clean Architecture

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ Π½ΠΈΡ… ΠΎΠ±Ρ‰Π΅Π³ΠΎ, ΠΌΠ½Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ ΠΏΠΎ Ρ‚Ρ€ΠΈ прочтСния всСх ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΉ ΠœΠ°Ρ€Ρ‚ΠΈΠ½Π° ΠΎΠ± SRP. Π’Ρ‹ ΠΆΠ΅ сэкономитС дСнь-Π΄Π²Π° ΠΆΠΈΠ·Π½ΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΡ‚Π²Π΅Ρ‚ Π·Π° ΠΏΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΡŒ ΠΌΠΈΠ½ΡƒΡ‚, Ссли Π΄ΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ пост Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°.

Для Π½Π°Ρ‡Π°Π»Π° рассмотрим ΠΊΠ°ΠΊ Π°Π½ΠΊΠ» Π‘ΠΎΠ± ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ SRP послСдниС Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ Π»Π΅Ρ‚.

ОбъяснСния SRP

Agile software development Principles Patterns and Practices, 2003

Π’ΠΏΠ΅Ρ€Π²Ρ‹Π΅ SRP появился Π² Agile software development Principles Patterns and Practices. Π’ этой ΠΊΠ½ΠΈΠ³Π΅ ΠœΠ°Ρ€Ρ‚ΠΈΠ½ пояснял Π΅Π³ΠΎ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ раздСлСния ΠΊΠΎΠ΄Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Consider the bowling game from Chapter 6. For most of its development the Game class was handling two separate responsibilities. It was keeping track of the current frame, and it was calculating the score. In the end, RCM and RSK separated these two responsibilities into two classes. The Game kept the responsibility to keep track of frames, and the Scorer got the responsibility to calculate the score. (see page 85.)

β€” Robert C. Martin, Agile software development Principles Patterns and Practices

Clean Code, 2008

ΠŸΠΎΡΡΠ½ΡΡ‚ΡŒ SRP Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ раздСлСния ΠΊΠΎΠ΄Π° ΠΏΠΎ функциям ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠœΠ°Ρ€Ρ‚ΠΈΠ½ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΈ Π² Clean Code:

The seemingly small SuperDashboard class in Listing 10-2 has two reasons to change. First, it tracks version information that would seemingly need to be updated every time the software gets shipped. Second, it manages Java Swing components (it is a derivative of JFrame, the Swing representation of a top-level GUI window)

β€” Robert C. Martin, Clean Code

The Clean Coder, 2011

Π—Π°Ρ‚Π΅ΠΌ Π² The Clean Coder Π°Π½ΠΊΠ» Π‘ΠΎΠ± ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ SRP ΡƒΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ раздСлСния аспСктов Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса ΠΈ бизнСс-ΠΏΡ€Π°Π²ΠΈΠ»):

There is a design principle called the Single Responsibility Principle (SRP). This principle states that you should separate those things that change for different reasons, and group together those things that change for the same reasons. GUIs are no exception.

The layout, format, and workflow of the GUI will change for aesthetic and efficiency reasons, but the underlying capability of the GUI will remain the same.

Design experts have been telling us for decades to separate our GUIs from our business rules.

β€” Robert C. Martin, The Clean Coder

The Single Responsibility Principle, 2014

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎ SRP Π°Π½ΠΊΠ» Π‘ΠΎΠ± ΡƒΠΆΠ΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ «Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ аспСктов [Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ]» (separation of concerns):

Two years later, Edsger Dijkstra wrote another classic paper entitled On the role of scientific thought. in which he introduced the term: The Separation of Concerns. [. ] This is the reason we do not put SQL in JSPs. This is the reason we do not generate HTML in the modules that compute results. This is the reason that business rules should not know the database schema. This is the reason we separate concerns.

β€” Robert C. Martin, https://blog.cleancoder.com/uncle-bob/2014/05/08/SingleReponsibilityPrinciple.html

Но здСсь ΠΆΠ΅, ΠœΠ°Ρ€Ρ‚ΠΈΠ½ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ SRP совсСм Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΊΠ»ΡŽΡ‡Π΅:

And this gets to the crux of the Single Responsibility Principle. This principle is about people.

When you write a software module, you want to make sure that when changes are requested, those changes can only originate from a single person, or rather, a single tightly coupled group of people representing a single narrowly defined business function.

β€” Robert C. Martin, https://blog.cleancoder.com/uncle-bob/2014/05/08/SingleReponsibilityPrinciple.html

Π—Π΄Π΅ΡΡŒ ΡƒΠΆΠ΅ Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΏΠΎ людям.

Clean Architecture, 2018

Π’ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΠ΅ это объяснСниС появляСтся Π΅Ρ‰Ρ‘ Ρ‡Π΅Ρ€Π΅Π· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π³ΠΎΠ΄Π° Π² Clean Architecture:

A module should be responsible to one, and only one, actor

β€” Robert C. Martin, Clean Architecture

Π”Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π»ΠΈΡ†ΠΎΠΌ (actor) Π² этом случаС являСтся Π³Ρ€ΡƒΠΏΠΏΠ° стСйкходСров (людСй Ρ‚Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ причастных ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈ Π΅Ρ‘ созданию) с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ потрСбностями.

ШСстая Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° SRP

МнС каТСтся Π±ΠΎΠ»Π΅Π΅ понятной ΡˆΠ΅ΡΡ‚Π°Ρ (ΡƒΠΆΠ΅ моя) Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° SRP:

ΠœΠΎΠ΄ΡƒΠ»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ стСйкхолдСра.

β€” АлСксСй Π–ΠΈΠ΄ΠΊΠΎΠ², Многоликий ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ СдинствСнности отвСтсвСнности

Ни эта, Π½ΠΈ любая другая Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° SRP Π½Π΅ Π΄Π°Ρ‘Ρ‚ программистам практичСского руководства ΠΊ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠ΄Π½Π΅Π²Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Π΅Π΅ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ SRP Π½Π° нСсколько практичСских Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ? НапримСр:

Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠΉΡ‚Π΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ ацикличСский Π³Ρ€Π°Ρ„ зависимостСй ΠΌΠ΅ΠΆΠ΄Ρƒ модулями;

раздСляйтС Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ (Π² Ρ‚ΠΎΠΌ числС GUI) ΠΈ бизнСс-ΠΏΡ€Π°Π²ΠΈΠ»Π°;

раздСляйтС ΠΊΠΎΠ΄ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ систСмы;

ΠΏΠΈΡˆΠΈΡ‚Π΅ тСсты. Π’ тСстах ΠΌΠΎΠΊΠ°ΠΉΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ внСшниС систСмы, Π° system under test создавайтС «Ρ€ΡƒΠΊΠ°ΠΌΠΈ» (Π° Π½Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ DI-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°).

Π­Ρ‚ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ большом ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ стСйкхолдСров ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ. И слСдованиС ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ мСханичСски.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠ΄Π½Π΅Π²Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ доступно Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌΡƒ ΠΊΡ€ΡƒΠ³Ρƒ программистов ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ даст ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡƒΡŽ ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΡƒΡŽ систСму Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅.

На суку висит ΠΌΠΎΡ‡Π°Π»ΠΎ, Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ всё сначала

Srp Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅

SOLID relevance, 2020

ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΉ SRP ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠ΅ΠΉ понимания SRP самим ΠœΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΌ. Π‘Π½Π°Ρ‡Π°Π»Π° для Π½Π΅Π³ΠΎ SRP Π±Ρ‹Π» ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΠΎ функциям ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΠΎΡ‚ΠΎΠΌ ΠΎΠ½ понял, Ρ‡Ρ‚ΠΎ ΠΏΠΎ аспСктам Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ. НаконСц, Π°Π½ΠΊΠ» Π‘ΠΎΠ± ΠΎΠ±ΠΎΠ±Ρ‰ΠΈΠ» ΠΈΡ… Ρ‡Π΅Ρ€Π΅Π· Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ трСбованиям Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π»ΠΈΡ†.

Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ объяснСниС развития событий. Пока ΠœΠ°Ρ€Ρ‚ΠΈΠ½ Π½Π΅ написал свой послСдний пост Π½Π° Ρ‚Π΅ΠΌΡƒ SRP. Π’ Π½Ρ‘ΠΌ ΠΎΠ½ снова откатился ΠΊ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ аспСктам:

It is hard to imagine that this principle is not relevant in software. We do not mix business rules with GUI code. We do not mix SQL queries with communications protocols.

β€” Robert C. Martin, https://blog.cleancoder.com/uncle-bob/2020/10/18/Solid-Relevance.html

Если ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ объяснСний SRP с высоты «ΠΏΡ‚ΠΈΡ‡ΡŒΠ΅Π³ΠΎ ΠΏΠΎΠ»Ρ‘Ρ‚Π°», Ρ‚ΠΎ становится Π²ΠΈΠ΄Π½ΠΎ Ρ‡Ρ‚ΠΎ Π°Π½ΠΊΠ» Π‘ΠΎΠ± постоянно скачСт ΠΌΠ΅ΠΆΠ΄Ρƒ этими критСриями Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΊΠΎΠ΄Π°:

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΉ SRP

Agile software development Principles Patterns and Practices

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π½Π°ΠΌΡ‘ΠΊ Π½Π° Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π»ΠΈΡ†ΠΎ*

The Single Responsibility Principle

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, аспСкт Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π»ΠΈΡ†ΠΎ

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π»ΠΈΡ†ΠΎ, Π² мСньшСй стСпСни аспСкт Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ**

* Π’ Agile software development Principles Patterns and Practices Π±Ρ‹Π» ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Π³Π»Π°Π²Π΅ ΠΏΡ€ΠΎ SRP.

Srp Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅

Two different applications use the Rectangle class. One application does computational geometry. It uses Rectangle to help it with the mathematics of geometric shapes. It never draws the rectangle on the screen. The other application is graphical in nature. It may also do some computational geometry, but it definitely draws the rectangle on the screen.

β€” Robert C. Martin, Agile software development Principles Patterns and Practices

Глядя Π½Π° этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ (ΠΈΠ· 2021 Π³ΠΎΠ΄Π°) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΉΡ‚ΠΈ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Ρƒ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ (ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΈΠ΄ΠΎΠ² Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π»ΠΈΡ†) ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ draw ΠΈ area Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ трСбования Ρ€Π°Π·Π½Ρ‹Ρ… Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π»ΠΈΡ†.

** Π’ Clean Architecture Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ аспСкту Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠΆΠ΅ присутствуСт (ΠΌΠ΅Ρ‚ΠΎΠ΄ save, опрСдСляСмый CTO). Но Π² этой ΠΊΠ½ΠΈΠ³Π΅ ΠœΠ°Ρ€Ρ‚ΠΈΠ½ ΡƒΠΆΠ΅ явно Π½Π΅ ΠΏΡ€ΠΎΠ³ΠΎΠ²Π°Ρ€ΠΈΠ²Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ раздСлСния ΠΏΠΎ аспСктам. Π’ сочСтании с Π½Π΅Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ слова actor, это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ объяснСниС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° основС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ SRP, Π½ΠΎ Π² ΠΆΠΈΠ·Π½ΠΈ я Π΅Ρ‘ ΠΏΠΎΠΊΠ° Π½Π΅ встрСчал.

МоТно Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ SQL ΠΈ JSP ΠΈ всё Π΅Ρ‰Ρ‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄ Π² Ρ€Π°Π·Π½Ρ‹Ρ… функциях ΠΈ Π»ΠΎΠΌΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ΄Π½ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΌΠΎΠΆΠ½ΠΎ завСсти ΠΏΠΎ микросСрвису для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ систСмы ΠΈ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π² ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ парсинг json-Π°, ΠΈ бизнСс-ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ SQL-запросов. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ…Ρ€ΡƒΠΏΠΊΠΈΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ.

МоТСм Π»ΠΈ ΠΌΡ‹ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈ интСрпрСтация ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ мСняСтся ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ Ρ‚Ρ€ΠΈ Π³ΠΎΠ΄Π°? Π― Π΄ΡƒΠΌΠ°ΡŽ Π½Π΅Ρ‚.

Нам Π½ΡƒΠΆΠ½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠΌ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ:

Π²ΠΎΠΎΠ±Ρ‰Π΅, Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ понятно, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ SRP. Π Π°Π·Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΏΠΎΠ΄ этой Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Π΄ΠΈΠ·Π°ΠΉΠ½Π°. Π”Π°ΠΆΠ΅ сам ΠœΠ°Ρ€Ρ‚ΠΈΠ½ постоянно ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ SRP;

Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ½Π΅ каТСтся ЕдинствСнно Π’Π΅Ρ€Π½ΠΎΠΉ ВСрсиСй SRP, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ для этой вСрсии Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΡƒ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚.

И хотя SRP являСтся самым Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ SOLID-Π°, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Ρ‚ΠΎΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ разночтСния ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ SOLID Π² своём Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ являСтся Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ руководством ΠΏΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ систСм.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Single Responsibility Principle. НС Ρ‚Π°ΠΊΠΎΠΉ простой, ΠΊΠ°ΠΊ каТСтся

Srp Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅Single responsibility principle, ΠΎΠ½ ΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π΅Π΄ΠΈΠ½ΠΎΠΉ отвСтствСнности,
ΠΎΠ½ ΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π΅Π΄ΠΈΠ½ΠΎΠΉ измСнчивости β€” ΠΊΡ€Π°ΠΉΠ½Π΅ скользкий для понимания ΠΏΠ°Ρ€Π΅Π½ΡŒ ΠΈ ΡΡ‚ΠΎΠ»ΡŒ Π½Π΅Ρ€Π²ΠΎΠ·Π½Ρ‹ΠΉ вопрос Π½Π° собСсСдовании программиста.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠ΅ знакомство с этим ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ ΡΠΎΡΡ‚ΠΎΡΠ»ΠΎΡΡŒ для мСня Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ курса, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠ»ΠΎΠ΄Ρ‹Ρ… ΠΈ Π·Π΅Π»Π΅Π½Ρ‹Ρ… нас Π²Ρ‹Π²Π΅Π·Π»ΠΈ Π² лСс, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ· Π»ΠΈΡ‡ΠΈΠ½ΠΎΠΊ студСнтов β€” студСнтов настоящих.

Π’ лСсу нас Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ»ΠΈ Π½Π° Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΠΎ 8-9 Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈ устроили сорСвнованиС β€” какая Π³Ρ€ΡƒΠΏΠΏΠ° быстрСС Π²Ρ‹ΠΏΡŒΠ΅Ρ‚ Π±ΡƒΡ‚Ρ‹Π»ΠΊΡƒ Π²ΠΎΠ΄ΠΊΠΈ ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΈΠ· Π³Ρ€ΡƒΠΏΠΏΡ‹ Π½Π°Π»ΠΈΠ²Π°Π΅Ρ‚ Π²ΠΎΠ΄ΠΊΡƒ Π² стакан, Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ΠΏΠΈΠ²Π°Π΅Ρ‚, Π° Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ закусываСт. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ²ΡˆΠΈΠΉ свою ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΡŽΠ½ΠΈΡ‚ встаСт Π² ΠΊΠΎΠ½Π΅Ρ† ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹.

Π‘Π»ΡƒΡ‡Π°ΠΉ, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π±Ρ‹Π» ΠΊΡ€Π°Ρ‚Π΅Π½ Ρ‚Ρ€Π΅ΠΌ, ΠΈ являлся Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ SRP.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ 1. Единая ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ.

ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π΅Π΄ΠΈΠ½ΠΎΠΉ отвСтствСнности (SRP) Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΅ΡΡ‚ΡŒ своя ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° сущСствования ΠΈ эта ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Ρƒ Π½Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π°.

Рассмотрим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ «Π’Ρ‹ΠΏΠΈΠ²ΠΎΡ…Π°» (Tippler).
Для выполнСния ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° SRP Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ обязанности Π½Π° Ρ‚Ρ€ΠΎΠΈΡ…:

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· участников процСсса отвСтствСнСн Π·Π° ΠΎΠ΄Π½Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ процСсса, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΡƒΡŽ ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ β€” Π²Ρ‹ΠΏΠΈΡ‚ΡŒ, Π½Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°ΠΊΡƒΡΠΈΡ‚ΡŒ.

Π’Ρ‹ΠΏΠΈΠ²ΠΎΡ…Π° ΠΆΠ΅, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ являСтся фасадом для Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ:

Srp Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅

Π—Π°Ρ‡Π΅ΠΌ?

Π§Π΅Π»ΠΎΠ²Π΅ΠΊ-программист ΠΏΠΈΡˆΠ΅Ρ‚ ΠΊΠΎΠ΄ для Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°-ΠΎΠ±Π΅Π·ΡŒΡΠ½Ρ‹, Π° Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ-обСзьяна Π½Π΅Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π΅Π½, Π³Π»ΡƒΠΏ ΠΈ Π²Π΅Ρ‡Π½ΠΎ ΠΊΡƒΠ΄Π°-Ρ‚ΠΎ ΡΠΏΠ΅ΡˆΠΈΡ‚. Он ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΎΠΊΠΎΠ»ΠΎ 3 β€” 7 Ρ‚Π΅Ρ€ΠΌΠΎΠ² Π² ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.
Π’ случаС Π²Ρ‹ΠΏΠΈΠ²ΠΎΡ…ΠΈ этих Ρ‚Π΅Ρ€ΠΌΠΎΠ² Ρ‚Ρ€ΠΈ. Однако Ссли ΠΌΡ‹ напишСм ΠΊΠΎΠ΄ ΠΎΠ΄Π½ΠΎΠΉ простынСй, Ρ‚ΠΎ Π² Π½Π΅ΠΌ появятся Ρ€ΡƒΠΊΠΈ, стаканы, ΠΌΠΎΡ€Π΄ΠΎΠ±ΠΎΠΈ ΠΈ бСсконСчныС споры ΠΎ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ΅. И всС это Π±ΡƒΠ΄Π΅Ρ‚ Π² Ρ‚Π΅Π»Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π£Π²Π΅Ρ€Π΅Π½ β€” Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π² своСй ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. НС самоС Π³ΡƒΠΌΠ°Π½Π½ΠΎΠ΅ испытаниС для психики.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ-обСзьяна Π·Π°Ρ‚ΠΎΡ‡Π΅Π½ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π° Π² своСй Π³ΠΎΠ»ΠΎΠ²Π΅. Π’ своСм Π²ΠΎΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡ… ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒ, ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈΠ· Π½ΠΈΡ… Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒ. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС ΡΡ‚Π°Ρ€ΡƒΡŽ модСль ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π² Π²ΠΎΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΄Π²Π΅Ρ€ΡŒ, ΠΎΡ‚ΠΊΡ€ΡƒΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±ΡˆΠΈΠ²ΠΊΡƒ Π΄Π²Π΅Ρ€ΠΈ ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΡΡ‚Π΅ΠΊΠ»ΠΎΠΏΠΎΠ΄ΡŠΠ΅ΠΌΠ½ΠΈΠΊΠΎΠ², Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄ΡƒΡ‚ ΡˆΠ΅ΡΡ‚Π΅Ρ€Π½ΠΈ. Но Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π² ΠΎΠ΄Π½ΠΎΠΌ «Π»ΠΈΡΡ‚ΠΈΠ½Π³Π΅». По ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ «Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ-обСзьяна» Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΈ-программисты Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ€ΡƒΡŽΡ‚ слоТныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π½Π° Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Π½Π΅Π΅ слоТных ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… элСмСнтов. Однако, Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ: Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… старых ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… β€” Π²ΠΎΠ·Π΄ΡƒΡ…ΠΎΠ²ΠΎΠ΄ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π΄Π²Π΅Ρ€ΡŒ, Π° Π² соврСмСнных β€” сбой элСктроники Π·Π°ΠΌΠΊΠ° Π½Π΅ Π΄Π°Π΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΡŽ, Ρ‡Ρ‚ΠΎ доставляСт ΠΏΡ€ΠΈ Ρ€Π΅ΠΌΠΎΠ½Ρ‚Π΅.

Π’Π°ΠΊ Π²ΠΎΡ‚, SRP β€” это ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‰ΠΈΠΉ КАК Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π³Π΄Π΅ провСсти линию раздСлСния.

Он Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π΄ΠΎ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ раздСлСния «ΠΎΡ‚вСтствСнности», Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎ Π·Π°Π΄Π°Ρ‡Π°ΠΌ Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Srp Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅

ВСрнСмся ΠΊ Π²Ρ‹ΠΏΠΈΠ²ΠΎΡ…Π΅ ΠΈ плюсам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ-обСзьянка ΠΏΡ€ΠΈ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ:

И, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, минусы:

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ 2. Единая ΠΈΠ·ΠΌΠ΅Π½Ρ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ.

ΠŸΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ господа! Класс Π²Ρ‹ΠΏΠΈΠ²ΠΎΡ…ΠΈ ΠΆΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ выполняСт Π΅Π΄ΠΈΠ½ΡƒΡŽ ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ β€” ΠΎΠ½ Π²Ρ‹ΠΏΠΈΠ²Π°Π΅Ρ‚! И Π²ΠΎΠΎΠ±Ρ‰Π΅, слово «ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ» β€” понятиС ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π°Π·ΠΌΡ‹Ρ‚ΠΎΠ΅. ΠšΡ‚ΠΎ-Ρ‚ΠΎ отвСтствСнСн Π·Π° ΡΡƒΠ΄ΡŒΠ±Ρƒ чСловСчСства, Π° ΠΊΡ‚ΠΎ-Ρ‚ΠΎ отвСтствСнСн Π·Π° ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΎΠΏΡ€ΠΎΠΊΠΈΠ½ΡƒΡ‚Ρ‹Ρ… Π½Π° полюсС ΠΏΠΈΠ½Π³Π²ΠΈΠ½ΠΎΠ².

Рассмотрим Π΄Π²Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠΈΠ²ΠΎΡ…ΠΈ. ΠŸΠ΅Ρ€Π²Π°Ρ, указанная Π²Ρ‹ΡˆΠ΅, содСрТит Π² сСбС Ρ‚Ρ€ΠΈ класса β€” Π½Π°Π»ΠΈΡ‚ΡŒ, Π²Ρ‹ΠΏΠΈΡ‚ΡŒ ΠΈ Π·Π°ΠΊΡƒΡΠΈΡ‚ΡŒ.

Вторая, написана Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡŽ «Π’ΠΏΠ΅Ρ€Π΅Π΄ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΏΠ΅Ρ€Π΅Π΄» ΠΈ содСрТит всю Π»ΠΎΠ³ΠΈΠΊΡƒ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Act:

Оба этих класса, с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния стороннСго Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»Ρ, выглядят Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π΅Π΄ΠΈΠ½ΡƒΡŽ ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ «Π²Ρ‹ΠΏΠΈΡ‚ΡŒ».

Π’ΠΎΠ³Π΄Π° ΠΌΡ‹ Π»Π΅Π·Π΅ΠΌ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΈ ΡƒΠ·Π½Π°Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ SRP β€” ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π΅Π΄ΠΈΠ½ΠΎΠΉ измСнчивости.

Π­Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ гласит, Ρ‡Ρ‚ΠΎ «Π£ модуля Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ²ΠΎΠ΄ для измСнСния«. Π’ΠΎ Π΅ΡΡ‚ΡŒ «ΠžΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ β€” это ΠΏΠΎΠ²ΠΎΠ΄ для измСнСния».

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

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ 3. Локализация ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

Π’Ρ‹ΠΏΠΈΠ²ΠΎΡ…ΠΈ часто Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ΠΈ ΠΏΡ€ΠΎΡΠ½ΡƒΠ»ΠΈΡΡŒ Π² Ρ‡ΡƒΠΆΠΎΠΉ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Π΅, ΠΈΠ»ΠΈ Π³Π΄Π΅ ΠΈΡ… ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ. ΠŸΡ€ΠΈΡˆΠ»ΠΎ врСмя Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²ΠΊΡƒ.

НачнСм Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²ΠΊΡƒ с процСсса наливания:

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π² Π΅Π΅ Π² PourOperation, ΠΌΡ‹ поступили ΠΌΡƒΠ΄Ρ€ΠΎ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния отвСтствСнности ΠΈ инкапсуляции, Π½ΠΎ Π²ΠΎΡ‚ с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ измСнчивости Ρƒ нас Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠΎΠ½Ρ„ΡƒΠ·. Помимо самой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ, ΠΈΠ·ΠΌΠ΅Π½Ρ‡ΠΈΠ²ΠΎΠΉ становится ΠΈ сама Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²ΠΊΠ°. ΠŸΡ€ΠΈΠ΄Π΅Ρ‚ΡΡ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ наливания:

Π”ΠΎΡ‚ΠΎΡˆΠ½Ρ‹ΠΉ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚, Ρ‡Ρ‚ΠΎ LogAfter, LogBefore ΠΈ OnError Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΈ ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌΠΈ дСйствиями создаст Ρ‚Ρ€ΠΈ класса: PourLoggerBefore, PourLoggerAfter ΠΈ PourErrorLogger.

А вспомнив, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ для Π²Ρ‹ΠΏΠΈΠ²ΠΎΡ…ΠΈ Ρ‚Ρ€ΠΈ β€” ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π΄Π΅Π²ΡΡ‚ΡŒ классов логирования. Π’ ΠΈΡ‚ΠΎΠ³Π΅ вСсь Π²Ρ‹ΠΏΠΈΠ²ΠΎΡ…Π° состоит ΠΈΠ· 14 (. ) классов.

Π“ΠΈΠΏΠ΅Ρ€Π±ΠΎΠ»Π°? Π•Π΄Π²Π° Π»ΠΈ! Π§Π΅Π»ΠΎΠ²Π΅ΠΊ-обСзьянка с Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ Π³Ρ€Π°Π½Π°Ρ‚ΠΎΠΉ Ρ€Π°Π·Π΄Ρ€ΠΎΠ±ΠΈΡ‚ β€œΠ½Π°Π»ΠΈΠ²Π°Ρ‚Π΅Π»Ρβ€ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠ½, стакан, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ наливания, сСрвис ΠΏΠΎΠ΄Π°Ρ‡ΠΈ Π²ΠΎΠ΄Ρ‹, Ρ„ΠΈΠ·ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ модСль столкновСния ΠΌΠΎΠ»Π΅ΠΊΡƒΠ» ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠ²Π°Ρ€Ρ‚Π°Π» Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Ρ€Π°ΡΠΏΡƒΡ‚Π°Ρ‚ΡŒ зависимости Π±Π΅Π· Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. И ΠΏΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ β€” ΠΎΠ½ Π½Π΅ остановится.

ИмСнно Π½Π° этом ΠΌΠΎΠΌΠ΅Π½Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ приходят ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ SRP β€” это сказки ΠΈΠ· Ρ€ΠΎΠ·ΠΎΠ²Ρ‹Ρ… королСвств, ΠΈ уходят Π²ΠΈΡ‚ΡŒ Π»Π°ΠΏΡˆΡƒ.

… Ρ‚Π°ΠΊ ΠΈ Π½Π΅ ΡƒΠ·Π½Π°Π² ΠΎ сущСствовании Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ опрСдСлСния Srp:

«Π‘Ρ…ΠΎΠΆΠΈΠ΅ для измСнСния Π²Π΅Ρ‰ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС«. ΠΈΠ»ΠΈ β€œΠ’ΠΎ, Ρ‡Ρ‚ΠΎ измСняСтся вмСстС, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС”

Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ссли ΠΌΡ‹ мСняСм Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ это ΠΌΠ΅Π½ΡΡ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС.

Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ β€” Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС объяснСния SRP, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π²Ρ‹ΡˆΠ΅, Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°Π΄ΠΎ Π΄Ρ€ΠΎΠ±ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ дробятся, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π»ΠΎ «ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ свСрху» Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΡƒΠΆΠ΅ ΠΈ ΠΎΠ± «ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΈ снизу». Π˜Π½Ρ‹ΠΌΠΈ словами, SRP Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ «Π΄Ρ€ΠΎΠ±ΠΈΡ‚ΡŒ ΠΏΠΎΠΊΠ° дробится», Π½ΠΎ ΠΈ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Ρ€Π°Ρ‚ΡŒΡΡ β€” «Π½Π΅ Ρ€Π°Π·Π΄Ρ€ΠΎΠ±ΠΈΡ‚ΡŒ сцСплСнныС Π²Π΅Ρ‰ΠΈ». НС ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ Π±Π΅Π· надобности. Π­Ρ‚ΠΎ вСликая Π±ΠΈΡ‚Π²Π° Π±Ρ€ΠΈΡ‚Π²Ρ‹ Оккама с Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ-обСзьяной!

Srp Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ΠΏΠΈΠ²ΠΎΡ…Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π³Ρ‡Π΅. Помимо Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ Π½Π°Π΄ΠΎ Π΄Ρ€ΠΎΠ±ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ IPourLogger Π½Π° Ρ‚Ρ€ΠΈ класса, ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ всС Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΈ Π² ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏ:

И Ссли Π½Π°ΠΌ добавится Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‚ΠΎ для Π½Π΅Π΅ ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Π° Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²ΠΊΠ°. А ΠΊΠΎΠ΄ самих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ чист ΠΈ ΠΈΠ·Π±Π°Π²Π»Π΅Π½ ΠΎΡ‚ инфраструктурного ΡˆΡƒΠΌΠ°.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρƒ нас 5 классов для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ выпивания:

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ строго Π·Π° ΠΎΠ΄Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ для измСнСния. ВсС схоТиС для измСнСния ΠΏΡ€Π°Π²ΠΈΠ»Π° Π»Π΅ΠΆΠ°Ρ‚ рядом.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° «User» Π² строку.

МоТно ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… классах:

Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ своя ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ²ΠΎΠ΄ для измСнСния.

Но ΠΏΠΎΠ²ΠΎΠ΄ для измСнСния Ρƒ Π½ΠΈΡ… ΠΎΠ±Ρ‰ΠΈΠΉ β€” «ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° сСриализации Π΄Π°Π½Π½Ρ‹Ρ…».
И ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ этого Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° всСгда Π±ΡƒΠ΄ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΈ сСриализация ΠΈ дСсСриализация вмСстС.

Богласно ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΈΡ… Π² ΠΎΠ΄ΠΈΠ½ класс:

Π­Ρ‚ΠΎ избавиляСт нас ΠΎΡ‚ излишнСй слоТности, ΠΈ нСобходимости ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ сСриализатора, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΈ ΠΎ дСсСриализаторС.

НСобходимо ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π³ΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π²Ρ‹Ρ€ΡƒΡ‡ΠΊΡƒ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π΅ Π² Ρ„Π°ΠΉΠ» C:\results.txt.

Быстро Ρ€Π΅ΡˆΠ°Π΅ΠΌ это ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

ΠŸΠΎΡ‚ΠΎΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° Π΄Π²Π°:

Π’ этом спискС Π±Ρ‹Π»ΠΎ Π΅Ρ‰Π΅ ΠΎΠΊΠΎΠ»ΠΎ 10-Ρ‚ΠΈ бизнСс ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΆΡƒΡ‚ΠΊΠΎΠΉ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΡΡ‚ΡŒΡŽ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ счСта Π½ΡƒΠΆΠ΅Π½ Π±Ρ‹Π» ΠΏΠΎΡ‡Ρ‚ΠΈ всСм. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ имя ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½ΡƒΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ Π² ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².

ПослС часового Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°, ΠΌΡ‹ смогли ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ инфраструктурный ΠΊΠΎΠ΄ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡŽΠ°Π½ΡΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠΌ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹/классы. God ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ»Π΅Π³Ρ‡Π°Π», Π½ΠΎ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ 100 строк ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΠΏΡƒΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΈ.

Π›ΠΈΡˆΡŒ Ρ‡Π΅Ρ€Π΅Π· нСсколько Π΄Π½Π΅ΠΉ ΠΏΡ€ΠΈΡˆΠ»ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‚ΡŒ этого «ΠΏΠΎΠ»Π΅Π³Ρ‡Π°Π²ΡˆΠ΅Π³ΠΎ» ΠΌΠ΅Ρ‚ΠΎΠ΄Π° β€” ΠΈ Π΅ΡΡ‚ΡŒ бизнСс Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. И Ρ‡Ρ‚ΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ описаниС Π’Π— Π±Ρ‹Π»ΠΎ довольно слоТным. И ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° куски этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ΠΌ SRP, Π° Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

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

ΠŸΡ€ΠΈΡˆΠ»ΠΎ врСмя ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ΠΏΠΎΠΊΠΎΠ΅ нашСго Π²Ρ‹ΠΏΠΈΠ²ΠΎΡ…Ρƒ. Π’Ρ‹Ρ‚Ρ€ΠΈΡ‚Π΅ слСзы β€” ΠΌΡ‹ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ вСрнСмся ΠΊ Π½Π΅ΠΌΡƒ ΠΊΠ°ΠΊ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ. А сСйчас Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΡƒΠ΅ΠΌ знания ΠΈΠ· этой ΡΡ‚Π°Ρ‚ΡŒΠΈ.

Π€ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΌ 1. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ SRP

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

МнС Π½Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ достаточныС ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ выполнСния SRP. Но Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ условия:

1) Π—Π°Π΄Π°ΠΉΡ‚Π΅ сСбС вопрос β€” Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ этот класс/ΠΌΠ΅Ρ‚ΠΎΠ΄/ΠΌΠΎΠ΄ΡƒΠ»ΡŒ/сСрвис. Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° Π½Π΅Π³ΠΎ простым ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ. ( Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€ΡŽ Brightori )

Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ простоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‡Π΅Π½ΡŒ слоТно

2) Ѐикс Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Π°Π³Π° ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Ρ„ΠΈΡ‡ΠΈ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ минимальноС количСство Ρ„Π°ΠΉΠ»ΠΎΠ²/классов. Π’ ΠΈΠ΄Π΅Π°Π»Π΅ β€” ΠΎΠ΄ΠΈΠ½.

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ (Π·Π° Ρ„ΠΈΡ‡Ρƒ ΠΈΠ»ΠΈ Π±Π°Π³) инкапсулированна Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅/классС, Ρ‚ΠΎ Π²Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅Ρ‚Π΅ Π³Π΄Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΈ Ρ‡Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. НапримСр: Ρ„ΠΈΡ‡Π° измСнСния Π²Ρ‹Π²ΠΎΠ΄Π° Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ. Π‘Π΅Π³Π°Ρ‚ΡŒ ΠΏΠΎ всСму ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ Π½Π΅ трСбуСтся.

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ UI-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π°, схоТСго с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌΠΈ. Если это заставляСт вас Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ 10 Ρ€Π°Π·Π½Ρ‹Ρ… сущностСй ΠΈ 15 Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π΅Ρ€ΠΎΠ² β€” каТСтся, Π²Ρ‹ β€œΠΏΠ΅Ρ€Π΅Π΄Ρ€ΠΎΠ±ΠΈΠ»ΠΈβ€.

Если ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ «Π’Ρ‹Π»ΠΈΡ‚ΡŒ Π²ΠΎΠ΄ΠΊΡƒ ΠΏΠΎΠ΄ стол» Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚ΡŒ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ выпивания ΠΈ выливания β€” Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ отвСтствСнности Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ ΠΊΡ€ΠΈΠ²ΠΎ. БСзусловно, это Π½Π΅ всСгда Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΡ‚Π°Ρ€Π°Ρ‚ΡŒΡΡ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ этот ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ.

4) ΠŸΡ€ΠΈ ΡƒΡ‚ΠΎΡ‡Π½ΡΡŽΡ‰Π΅ΠΌ вопросС ΠΏΡ€ΠΎ бизнСс Π»ΠΎΠ³ΠΈΠΊΡƒ (ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°) Π²Ρ‹ Π»Π΅Π·Π΅Ρ‚Π΅ строго Π² ΠΎΠ΄ΠΈΠ½ класс/Ρ„Π°ΠΉΠ» ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ Ρ‚ΡƒΠ΄Π°.

Π€ΠΈΡ‡ΠΈ, ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈΠ»ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎ написаны каТдая Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС, Π° Π½Π΅ разбросаны Ρ„Π»Π°Π³Π°ΠΌΠΈ ΠΏΠΎ всСму пространству ΠΊΠΎΠ΄Π°.

Наш класс ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ отвСтствСнСн Π·Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ, ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½Π° Π² Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠΈ

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

Π€ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΌ 3. ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ «ΠžΠΊΠΊΠ°ΠΌΠ°-first».

Π’ Π½Π°Ρ‡Π°Π»Π΅ проСктирования, Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ-обСзьянка Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΈ Π½Π΅ чувствуСт всСх тонкостСй Ρ€Π΅ΡˆΠ°Π΅ΠΌΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ ΠΌΠ°Ρ…Ρƒ. ΠžΡˆΠΈΠ±Π°Ρ‚ΡŒΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ Ρ€Π°Π·Π½ΠΎΠΌΡƒ:

Π’Π°ΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ: «ΠΎΡˆΠΈΠ±Π°Ρ‚ΡŒΡΡ Π»ΡƒΡ‡ΡˆΠ΅ Π² Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ сторону», ΠΈΠ»ΠΈ «Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ β€” Π½Π΅ Π΄Ρ€ΠΎΠ±ΠΈΡ‚Π΅». Если, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ваш класс собираСт Π² сСбС Π΄Π²Π΅ отвСтствСнности β€” Ρ‚ΠΎ ΠΎΠ½ ΠΏΠΎ ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ понятСн ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΠΏΠΈΠ»ΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π° с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ клиСнтского ΠΊΠΎΠ΄Π°. Π‘ΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΆΠ΅ ΠΈΠ· осколков стСкла стакан, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, слоТнСС ΠΈΠ·-Π·Π° Ρ€Π°Π·ΠΌΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎ нСскольким Ρ„Π°ΠΉΠ»Π°ΠΌ контСкста ΠΈ отсутствия Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… зависимостСй Π² клиСнтском ΠΊΠΎΠ΄Π΅.

ΠŸΠΎΡ€Π° Π·Π°ΠΊΡ€ΡƒΠ³Π»ΡΡ‚ΡŒΡΡ

Π‘Ρ„Π΅Ρ€Π° примСнСния SRP Π½Π΅ ограничиваСтся ООП ΠΈ SOLID. Он ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ, функциям, классам, модулям, микросСрвисам ΠΈ сСрвисам. Он ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΊΠ°ΠΊ ΠΊ β€œΡ„ΠΈΠ³Π°ΠΊΡ-фигакс-ΠΈ-Π²-прод”, Ρ‚Π°ΠΊ ΠΈ ΠΊ β€œΡ€ΠΎΠΊΠ΅Ρ‚-сайнс” Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, Π²Π΅Π·Π΄Π΅ дСлая ΠΌΠΈΡ€ Ρ‡ΡƒΡ‚ΠΎΡ‡ΠΊΡƒ Π»ΡƒΡ‡ΡˆΠ΅. Если Π·Π°Π΄ΡƒΠΌΠ°Ρ‚ΡŒΡΡ, Ρ‚ΠΎ это Π΅Π΄Π²Π° Π»ΠΈ Π½Π΅ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ всСй ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΈ. ΠœΠ°ΡˆΠΈΠ½ΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅, систСмы управлСния, Π΄Π° ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ всС слоТныС систСмы β€” строятся ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΈ β€œΠ½Π΅Π΄ΠΎΠ΄Ρ€ΠΎΠ±Π»Π΅Π½ΠΈΠ΅β€ Π»ΠΈΡˆΠ°Π΅Ρ‚ конструкторов гибкости, β€œΠΏΠ΅Ρ€Π΅Π΄Ρ€ΠΎΠ±Π»Π΅Π½ΠΈΠ΅β€ β€” эффСктивности, Π° Π½Π΅Π²Π΅Ρ€Π½Ρ‹Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ β€” Ρ€Π°Π·ΡƒΠΌΠ° ΠΈ Π΄ΡƒΡˆΠ΅Π²Π½ΠΎΠ³ΠΎ спокойствия.

Srp Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅

SRP Π½Π΅ Π²Ρ‹Π΄ΡƒΠΌΠ°Π½ ΠΏΡ€ΠΈΡ€ΠΎΠ΄ΠΎΠΉ ΠΈ Π½Π΅ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ‚ΠΎΡ‡Π½ΠΎΠΉ Π½Π°ΡƒΠΊΠΈ. Он Π²Ρ‹Π»Π΅Π·Π°Π΅Ρ‚ ΠΈΠ· Π½Π°ΡˆΠΈΡ… с Π²Π°ΠΌΠΈ биологичСских ΠΈ психологичСских ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ.Π­Ρ‚ΠΎ всСго лишь способ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒ слоТныС систСмы ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠΎΠ·Π³Π° Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°-ΠΎΠ±Π΅Π·ΡŒΡΠ½Ρ‹. Он рассказываСт Π½Π°ΠΌ, ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ систСму. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»Π° изрядного Π½Π°Π²Ρ‹ΠΊΠ° Ρ‚Π΅Π»Π΅ΠΏΠ°Ρ‚ΠΈΠΈ, Π½ΠΎ надСюсь, эта ΡΡ‚Π°Ρ‚ΡŒΡ слСгка развСяла Π΄Ρ‹ΠΌΠΎΠ²ΡƒΡŽ завСсу.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *