Какие книги по проектированию ПО ты читал?

«Какие книги по проектированию ПО ты читал?» — вопрос из категории Архитектура, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Из литературы по проектированию и архитектуре наиболее полезными для моей работы с PHP и высоконагруженными системами были:

  • "Чистый код" и "Чистая архитектура" Роберта Мартина. Сформировали понимание SOLID-принципов и важности разделения ответственности. Например, принцип инверсии зависимостей (DIP) напрямую применяю при проектировании сервисов в Symfony/Laravel, внедряя зависимости через интерфейсы.
  • "Предметно-ориентированное проектирование" (DDD) Вона Вернона. Книга сложная, но дала инструменты для работы со сложной бизнес-логикой. Использовал идеи ограниченных контекстов (Bounded Context) и антикоррупционных слоев при интеграции с legacy-системами.
  • "Паттерны проектирования" (GoF). Классика, которую нужно знать, но применяю выборочно. В PHP-экосистеме многие паттерны реализованы на уровне фреймворков (например, Observer в Laravel Events).
  • "Шаблоны интеграции корпоративных приложений" Грегора Хоупа и Бобби Вулфа. Незаменима при проектировании распределенных систем и микросервисов, с которыми приходится работать.

Практический пример из опыта: При рефакторинге монолита мы использовали принципы из "Чистой архитектуры" для выделения доменного слоя. Вместо спагетти-кода в контроллерах появились четкие сервисы, репозитории и value-объекты.

// До: Логика в контроллере
class OrderController {
    public function create(Request $request) {
        // Валидация, работа с БД, отправка email, логика скидок – всё здесь
    }
}

// После: Использование сервиса и DTO
class OrderController {
    public function create(CreateOrderRequest $request, OrderService $service) {
        $command = new CreateOrderCommand($request->validated());
        $order = $service->execute($command);
        return new OrderResource($order);
    }
}

Книги дают фундамент, но ключевое — адаптировать идеи под конкретный контекст проекта и возможности современного PHP.