PHP подкаст #13

Command паттерн, HAL для API, Varnish и Си спешит на помощь.

Скачать mp3 (27Мб)

Command паттерн используется для абстрагирования от технических деталей в пользу бизнес логики. Команду можно формировать из HTTP запроса, введенных данных в CLI и т.д. Команда содержит все необходимые данные для её обработки. Command Bus паттерн также способствует упрощению кода путем инкапсуляции:

  • Бизнес-логика перемещается в специальные хэндлеры и становится независимой от фреймворка (разлепляемся с реквестом, например).
  • Тонкий контроллер.
  • Упрощается тестирование.
  • Меньше дублирования кода.
  • Пространство для маневра за счет middleware (Decoration / Chain of responsibility).
  • Восстановление состояния системы за счет выполнения залогированных ранее команд.

Использование Command Bus особенно удобно в присутствии Service Layer, что предполагает скорее крупное приложение, чем небольшое. Часто — но не обязательно — мы говорим о Command Bus в контексте CQRS. Другим преимуществом Command Bus является разделение вызова и обработчика, что способствует последующему масштабированию — обработчик команды можно вынести за периметр приложения. Этот паттерн в некотором смысле также гарантирует перетекание ненужных зависимостей от фреймворка в бизнес-логику.

Реализаций командных шин предостаточно. Самые популярные:

Команда (Command) — это как правило объект с публичным атрибутами, своеобразный DTO. Здесь гармонично смотрятся get/set-методы. В командный объект целесообразно, например, мэпить реквест посредством форм-компонента или путем десериализации. Читать далее PHP подкаст #13

PHP подкаст #11

Новый стабильный PHP7.1, Symfony 3.2, дедупликации кеша, React вместо Twig’а, сериализуем руками, RabbitMQ для масштабирования и немного еще с Symfoniacs #10

Скачать mp3 (17Мб)

Главная новость недели — выход новой стабильной версии интерпретатора PHP 7.1. Миновало 6 RC и в обозначенный срок вышла новая стабильная версия.

Коротко обозначу новые фичи:

  • function test(): ?int // nullable type
  • function test(): void // void return type
  • function test(): iterable // iterable pseudo-type
  • if (is_iterable($sth)) { //…
  • private const GRUMPY_CONST = 666; // constant visibility
  • [«a» => $a, «b» => $b, «c» => $c] = [«a» => 1, «b» => 2, «c» => 3]; // list() -> []
  • } catch (Exception1  | Exception2 $e) { //…

Встречайте очередную стабильную версию Symfony 3.2. Перейти на неё очень просто, если вы уже на 3+ версии. Большинство нововведений о введении deprecations, которые будут бросать исключения в Symfony 4. В 3.2 единственным новым компонентом будет Worflow, реализующий сети Петри. Мы обсуждали их в одном из предыдущих подкастов.

Вы, наверное, обратили внимание, что я часто говорю о Symfony и не так часто о других фреймворках. На мой взгляд разработчики из Sensio labs ухватили из других экосистем важнейшие моменты раньше остальных в PHP-мире: микроядро/микрофреймворк, компоненты, которые можно более-менее легко замещать другими, отличная документация (в противовес бедной Zend Framework и не фредли на момент 2-3 летней давности). Тем не менее я хочу чтобы справедливость торжествовала и если вы хотите представлять в этом подкасте другие фреймворки, то прошу присоединяться. Я за разнообразие и конкуренцию. Читать далее PHP подкаст #11

PHP подкаст #10

Ночной выпуск подкаста. Все по-быстрому. Тестирование, новый отладчик наоборот, свежий PhpStorm, под гусеницами Яндекс Танка, готовые сборки и холивары.

Скачать mp3 (18Мб)

PHPChunkit — инструмент для запуска тестов параллельно. Есть возможность раскидать тесты на несколько серверов, указывая какой именно chunk выполнять каждому серверу. Если вы хотите запускать тесты параллельно на одной машине, то будьте внимательны с зависимыми серверами. Например, предусмотрите возможность для каждого тест-процесса иметь свою БД. PHPChunkit предоставляет кое-какие хелперы для решения этой проблемы. Рядом с этим репозиторием лежит демо, демонстрирующее как внедрить PHPChunkit в существующий проект с PHPUnit’ом.

Переживет ли ваш проект повышенную нагрузку? Делаете хороший продукт и это значит, что со временем вы однозначно будете переживать увеличение аудитории. Проверьте прямо сейчас свой проект, проехавшись по нему Яндекс Танком. Напишите в коментах сколько RPS вы выдерживаете и включаете ли нагрузочное тестирование в обойму CI?

Еще один отладчик для PHP Dontbug. Главная фича его в возможности обратить направление движения отладчика, т.е. отлаживать вспять. Есть интеграция со всеми IDE, которые поддерживают XDebug. Главное ограничение — невозможность править переменные во время отладки, т.е. все read only. В README репозитория есть ссылки на видео как оно все работает. Написано на Golang. Читать далее PHP подкаст #10