Багатьом із вас знайомі принципи SOLID, оскільки це базові принципи об’єктно-орієнтованого програмування та дизайну. SOLID складається з п’яти принципів:

  • Принцип єдиного обов’язку (Single Responsibility Principle)
  • Принцип відкритості/закритості (Open/Closed Principle)
  • Принцип підстановки Лісков (Liskov Substitution Principle)
  • Принцип розділення інтерфейсу (Interface Segregation Principle)
  • Принцип інверсії залежностей (Dependency Inversion Principle)

Варто ознайомитися з усіма принципами, проте у цій статті ми розглянемо перший із них.

Таке групування п’яти принципів SOLID запропонував легендарний інженер-програміст Роберт К. Мартін. Говорячи про принцип єдиного обов’язку, ми можемо найкраще представити його словами самого автора:

“Клас повинен мати лише одну причину для зміни”

Краса полягає в простоті принципу, який, втім, досить складно застосувати на практиці. Однак розробники, які дотримуються цього принципу, розробляють найкраще програмне забезпечення. Попри те, що його часто відносять лише до класів, цей принцип також можна реалізувати й у програмних компонентах та мікросервісах.

Переваги принципу єдиного обов’язку

Подібно до простого узагальнення самого принципу, принцип єдиного обов’язку — це принцип, якого слід намагатися дотримуватися, оскільки він полегшує роботу. Дотримуючись SRP, ви захищаєте себе від деяких побічних ефектів, які можуть бути спричинені змінами в майбутньому.

Вплив змін

Принцип SRP спрямований на спрощення впливу, який зміна вимог матиме в майбутньому. Коли вимоги все ж змінюються, це змінює обов’язки кожного класу. Якщо у вашому класі багато обов’язків, це означає, що потрібно буде більше змін. І навіть якщо змінюється лише один обов’язок, вам потрібно змінити увесь клас.

Покладаючи на кожний клас лише один обов’язок, ви усуваєте необхідність кількох змін у разі зміни однієї вимоги в майбутньому. По суті, дотримуючись принципу «один клас — один обов’язок» ви зменшуєте робоче навантаження та необхідність у численних непотрібних та складних змінах, які можуть спричинити небажані побічні ефекти.

Уторований шлях

Окрім усунення необхідності зайвих змін SRP дає розробникам ще одну суттєву перевагу. Класи, на які покладений лише один обов’язок, простіше пояснити, впровадити та зрозуміти, ніж ті, які призначені вирішити все. Наслідками цієї простоти є менша кількість помилок, швидша розробка та набагато легше життя в цілому.

Однак потрібно бути пильним і протистояти бажанню зробити все надто простим. Сприймаючи принцип надто буквально і створюючи класи, які мають лише одну функцію, розробники пізніше зіткнуться з безліччю проблем під час написання коду. SRP є чудовим орієнтиром, проте його не слід завжди поширювати на всі елементи вашої роботи.

Застереження

На перший погляд, принцип SRP може здатися простим та надійним методом. Проте, це не так.

Працюючи над довгостроковою збіркою програмного забезпечення найпростішим варіантом зазвичай є задоволення нових вимог через додавання методу функціональності до існуючого коду. Це швидше, ніж написання нового класу. На жаль, саме тут класи отримують обов’язки, які роблять програмне забезпечення складнішим для подальшого обслуговування.

Прекрасний спосіб обійти цю проблему — поставити собі коротке запитання, перш ніж продовжувати будь-які зміни: «Який обов’язок цього класу?»

Припустимо, що відповідь на це запитання передбачає наявність сполучника «та». У такому разі існує велика ймовірність того, що ви підете проти принципу єдиного обов’язку. Якщо таке трапляється, має сенс шукати кращого способу реалізації змін.

Висновок

Принцип єдиного обов’язку не дарма є одним з найпопулярніших принципів дизайну. І він чудово працює у разі правильного застосування. Проблеми виникають, коли ви вирішуєте пропустити основну настанову і починаєте ускладнювати клас додатковими обов’язками.

Готуючись до будь-яких змін, ви можете слідувати найкращим практикам та працювати згідно з SRP. Для цього просто запитайте себе: «Який обов’язок цього класу?»

Поки ви не зловживаєте настановами принципу SRP, створюючи класи лише з однією функцією, працюючи за принципом єдиного обов’язку, ви побачите, що робите кращу роботу, яку простіше пояснити і яка стійкіша до помилок та інших проблем у майбутньому.

Залишайтеся в курсі!

Підпишіться на нашу розсилку

    Будь ласка, доведіть, що ви людина, вибравши Літак.