Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Наведи приклад порушення SRP». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Порушення SRP** виникає, коли один клас бере на себе різні обов'язки, що належать до різних шарів або аспектів системи. **Ключове:** у результаті клас отримує три причини для зміни - зміну процесу створення замовлення, зміну формату email-сповіщень і зміну вимог до логування.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняПорушення SRP виникає, коли один клас бере на себе різні обов'язки, що належать до різних шарів або аспектів системи. Приклад: ## Приклад класу, що порушує SRP ```python class OrderService: def create_order(self, order_data): # бізнес-логіка створення замовлення self._validate(order_data) self._save_to_db(order_data) # відправка сповіщення клієнту self._send_email(order_data["email"]) # запис у лог-файл with open("orders.log", "a") as f: f.write(f"Order created: {order_data}\n") def _validate(self, data): ... def _save_to_db(self, data): ... def _send_email(self, email): ... ``` ## Розбір порушення 1. **Бізнес-логіка** Методи `create_order`, `_validate`, `_save_to_db` належать до домену «замовлення». 2. **Сповіщення** Метод `_send_email` належить до комунікацій - це інша відповідальність. 3. **Логування** Запис у `orders.log` належить до інфраструктури - третя відповідальність. У результаті клас має **три причини для зміни**: - змінився процес створення замовлення → потрібно змінювати клас; - змінився формат email-сповіщень → потрібно змінювати той самий клас; - змінилися вимоги до логування → потрібно змінювати знову той самий клас. Це пряме порушення SRP.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.