Ответ
Принцип единственной ответственности (SRP) напрямую повышает стабильность кода, так как изменение требований к одной функциональности затрагивает минимальное количество модулей.
Связь со стабильностью:
- Локализация изменений: Если класс отвечает только за одну задачу, то при изменении бизнес-правил, связанных с этой задачей, правки вносятся только в этот класс. Это предотвращает каскадные изменения по всей кодовой базе.
- Снижение риска регрессии: Изменения в одном модуле с меньшей вероятностью сломают другой, несвязанный модуль, поскольку их обязанности четко разделены.
- Упрощение тестирования: Классы с одной ответственностью проще покрывать модульными тестами, что позволяет быстрее выявлять проблемы при рефакторинге.
Пример нарушения и соблюдения SRP:
// НАРУШЕНИЕ: Класс Order выполняет три разные задачи.
class Order {
public function calculateTotal(): float { /* ... */ }
public function saveToDatabase(): void { /* ... */ }
public function sendConfirmationEmail(): void { /* ... */ }
}
// Изменение формата email или логики сохранения потребует правок в одном классе, что нестабильно.
// СОБЛЮДЕНИЕ: Каждая ответственность вынесена в отдельный класс.
class OrderCalculator {
public function calculateTotal(Order $order): float { /* ... */ }
}
class OrderRepository {
public function save(Order $order): void { /* ... */ }
}
class OrderNotifier {
public function sendConfirmation(Order $order): void { /* ... */ }
}
// Теперь изменение в логике отправки уведомлений затронет только класс OrderNotifier, оставляя расчеты и сохранение стабильными.
Таким образом, SRP минимизирует точки распространения изменений, что является ключом к поддержанию стабильной системы.