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

Ответ

Из литературы по проектированию и архитектуре наиболее полезными для моей работы с 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.

Ответ 18+ 🔞

А, ну это же классика, ёпта! Сидишь такой, листаешь умные книжки, а потом бац — и понимаешь, что половина твоего кода выглядит как мартышлюшка с гранатой: вроде и работает, но волнение ебать, каждую секунду ждёшь, когда накроется медным тазом.

Вот смотри, из всего, что я перелопатил, реально въехало в мозги и пригодилось:

  • "Чистый код" и "Чистая архитектура" дяди Боба. Ну, это как азбука, блядь. До них я думал, SOLID — это такая марка шин. А оказалось, эти принципы — реально спасают от пиздопроебибны в проекте. Особенно этот самый DIP, принцип инверсии зависимостей. Раньше сервисы в Laravel друг друга намертво хватали, а теперь ты через интерфейсы всё делаешь. Красота! Доверия к такому коду — овердохуища.
  • "Предметно-ориентированное проектирование" (DDD) от Вернона. Книга, конечно, та ещё хитрая жопа, читал — мозги набекрень. Но когда начал влезать в сложную бизнес-логику, а там одни костыли, вспомнил про ограниченные контексты. Это ж как перегородки в общежитии: один чувак орёт на тяжёлом метале, другой учит китайский — и они друг другу не мешают. Так и системы. Антикоррупционный слой — это вообще песня, когда приходится общаться с легаси, который выглядит, будто его писал хуй с винтом.
  • "Паттерны проектирования" (банда четырёх). Ну, классика, без неё никуда. Хотя в PHP часто оказывается, что фреймворк уже всё за тебя придумал. Сидишь, пытаешься прикрутить свой Observer, а Laravel тебе такой: "Чувак, расслабься, вот тебе ивенты, на, пользуйся". Но знать-то их надо, а то будешь выглядеть как полупидор на собеседовании.
  • "Шаблоны интеграции..." Хоупа и Вулфа. Вот это, блядь, реально спасло, когда полез в микросервисы. Там без таких штук — просто пиши пропало. Все эти шины, маршрутизаторы сообщений — без книги чувствуешь себя слепым котёнком.

Ну и из практики, чтобы не просто трепаться: Был у нас один монолит, старый, страшный. Чистый ад, терпения ноль ебать. Мы как раз по книжкам дяди Боба взяли и начали выпиливать из него доменный слой. Раньше в контроллере была такая каша, что сам чёрт ногу сломит — и валидация, и письма, и скидки, и в базу запись. Сплошной распиздяй-код.

// Было: Всё в одной куче, как в помойном ведре. Смотрел на это и думал: "Какого хуя?"
class OrderController {
    public function create(Request $request) {
        // Валидация, работа с БД, отправка email, логика скидок – всё здесь
    }
}

// Стало: Разложили по полочкам. Чувствуешь разницу? Теперь хоть понятно, где что.
class OrderController {
    public function create(CreateOrderRequest $request, OrderService $service) {
        $command = new CreateOrderCommand($request->validated());
        $order = $service->execute($command);
        return new OrderResource($order);
    }
}

В общем, книги — это, конечно, фундамент, ядрёна вошь. Но главное — не стать фанатиком и не пытаться впихнуть все паттерны разом. Смотри по проекту, по команде. Адаптируй, блядь. Современный PHP многое уже умеет из коробки, не надо изобретать велосипед, который будет похож на манду с ушами.