1. Single Responsibility (Принцип единственной ответственности) 📌 Один класс — одна задача. ❌ Плохо: Класс Order занимается всем: валидацией, сохранением в БД, отправкой email. class Order
{
public function validate(): bool { /* ... */ }
public function save(): void { /* ... */ }
public function sendEmail(): void { /* ... */ }
} ✅ Хорошо: Разделяем логику на отдельные классы. class OrderValidator { /* ... */ }
class OrderRepository { /* ... */ }
class OrderNotifier { /* ... */ } 2. Open-Closed (Принцип открытости/закрытости) 📌 Классы должны быть открыты для расширения, но закрыты для изменений. ❌ Плохо: Добавление нового типа скидки требует правки метода. class DiscountCalculator
{
public function applyDiscount(string $type, float $price): float
{
if ($type === 'black_friday') {
return $price * 0.7;
} elseif ($type === 'new_year') {
return $price * 0.8;
}
// Новый тип? Еще один `elseif`? Нет, спасибо!
}