Что такое SOLID · PHP Backend — JobPilot

Что такое SOLID

PHP Backend · 44%
Вопрос 6 / #
Пример ответа

1) Короткий ответ
SOLID — это набор из пяти принципов объектно-ориентированного программирования, которые делают код более понятным, гибким и легким для поддержки.

2) Пять принципов (краткий список)

  1. SRP (Single Responsibility) — один класс — одна ответственность.

  2. OCP (Open/Closed) — классы открыты для расширения, но закрыты для изменений.

  3. LSP (Liskov Substitution) — объекты базового класса должны быть заменяемы на объекты потомков.

  4. ISP (Interface Segregation) — много специализированных интерфейсов лучше одного универсального.

  5. DIP (Dependency Inversion) — завись от абстракций, а не от конкретных классов.

3) Объяснение на примере SRP и DIP
Проблема: Класс OrderProcessor выполняет слишком много:

php

Copy

Download

// ПЛОХО: Класс знает о логике заказа, оплате и уведомлениях.
class OrderProcessor {
    public function process(Order $order) {
        $this->checkStock($order);
        $this->chargePayment($order);
        $this->sendEmail($order); // При изменении способа уведомления нужно менять класс
    }
}

Решение с SRP и DIP:

php

Copy

Download

// ХОРОШО: Ответственности разделены, зависимости инвертированы через интерфейс.
class OrderProcessor {
    public function __construct(
        private PaymentGateway $payment,
        private NotificationService $notifier
    ) {}
    
    public function process(Order $order) {
        $this->payment->charge($order);
        $this->notifier->send($order);
    }
}

6) Follow-up вопросы

  • Приведите пример нарушения LSP?Квадрат-прямоугольник.

  • Как вы применили SOLID в реальном проекте?Разделил сервисы.

7) Практический совет

  1. Возьмите любой свой класс, который делает больше одной вещи, и разделите его на 2-3 отдельных класса (например, вынесите логику отправки email в отдельный NotificationService).

  2. Проанализируйте 1-2 своих интерфейса — не нарушают ли они ISP? Если интерфейс слишком большой, разбейте его на несколько более мелких и специфичных.

PHP Backend
Junior
44%
Навигация
Чем занимаешься в свободное время
Следующий: Что такое Транзакция
Предыдущий: Чем занимаешься в свободное время

Мы используем cookie для улучшения сайта. Продолжая пользоваться сайтом, вы соглашаетесь с политикой cookie и политикой конфиденциальности.