Command паттерн, HAL для API, Varnish и Си спешит на помощь.
Command паттерн используется для абстрагирования от технических деталей в пользу бизнес логики. Команду можно формировать из HTTP запроса, введенных данных в CLI и т.д. Команда содержит все необходимые данные для её обработки. Command Bus паттерн также способствует упрощению кода путем инкапсуляции:
Использование Command Bus особенно удобно в присутствии Service Layer, что предполагает скорее крупное приложение, чем небольшое. Часто — но не обязательно — мы говорим о Command Bus в контексте CQRS. Другим преимуществом Command Bus является разделение вызова и обработчика, что способствует последующему масштабированию — обработчик команды можно вынести за периметр приложения. Этот паттерн в некотором смысле также гарантирует перетекание ненужных зависимостей от фреймворка в бизнес-логику.
Реализаций командных шин предостаточно. Самые популярные:
Команда (Command) — это как правило объект с публичным атрибутами, своеобразный DTO. Здесь гармонично смотрятся get/set-методы. В командный объект целесообразно, например, мэпить реквест посредством форм-компонента или путем десериализации.
В middleware вы можете выполнять валидацию, логирование, проверку на достаточность полномочий для выполнения команды, оборачивать выполнение команды в транзакцию и многое другое.
Стоит также упомянуть, что помимо Command Bus существует так называемый Event Bus. Главное отличие второго — можно одно событие обрабатывать \d* обработчиками. Фактически, в качестве Event Bus можно использовать любой Event Dispatcher компонент.
Каков он, идеальный пакет? Очередное предложение о том, как организовать true пакет:
bin/ # command-line executables
config/ # configuration files
docs/ # documentation and examples
public/ # web server files
src/ # source code
tests/ # test code
vendor/ # reserved for package managers
CHANGELOG # a log of changes between releases
CONTRIBUTING # guidelines for contributors
LICENSE # licensing information
README # information about the package itself
Не хватает var папки для логов и кеша, например, но в целом ничего. Примерно так многие и делают. А вы пишите доки?)
Everpot рассказал о их опыте использования HAL (Hypertext Application Language) и “трюке”. Но я затрону сам HAL для API. В hal+json помимо стандартного payload есть еще _links, содержащий релевантные ссылки. При помощи _links происходит описание связей текущей сущности с другими. Например, в ответ на GET-запрос о данных пользователя мы получаем _links, содержащий ссылки на группы, в которых он состоит. Использование HAL может упростить клиентам жизнь: выше информативность ответов.
Александр Лисаченко поделился опытом приготовления Varnish — кеширующий реверс-прокси. Рецепт примерно такой: читаем RFC 7232-7234, ставим Varnish, используем ESI (Edge-Side Includes) / render_esi и FOSHttpCache (опционально).
Не знаете как провести новый год? Конечно жа за книгой от Бенджамина Эберлея и других из Qafoo! Книга — это собрание их блог постов. Распространяется бесплатно. В книге затронуты темы объектно-ориентированного дизайна (переиспользование кода), тестирования (PHPUnit, Phake, Mink, фикстуры), рефакторинга, воркфлоу (автоматический деплой). 174 страницы!
На хабре небольшой каминг аут от Badoo. Интересно почитать коментарии. Прекрасно, что они также вкладываются в няшный Golang.
И в завершение и на закуску замечательная статья для тех, кому не безразлично как все устроено “под капотом”. Признаемся, что мы не занимаемся системным программирование, не часто заглядываем в C-код и еще реже вспоминаем про ассемблер. Статья Джульена Паули может стать отличным введением в мир низкоуровнего программирования. Как бы я хотел эту статью прочитать, когда увлекался книгами Юрова и писал экспериментальные вирусы. Автор на примере простой программы — суммирует побайтово 1Гб файл и сохраняет результат суммирования в 8-битном беззнаковом числе (unsigned char) — показывает как используя современные инструкции процессора повысить производительность с 3.5 сек до 0.5 сек. Суммирование файла размером в 1Гб за 0.5 сек. Отличный результат. В случае PHP разработки нужно же помнить, что C/C++ — программисты могут нам здорово помочь. В крупных компаниях они пишут всевозможные расширения для PHP, повышая производительность в узких местах. В любом случае эта статья отлично пойдет вечерком под зеленый чай. На хабре публиковался перевод, но оригинал читается легко. Кстати, в блоге Джульена статей не так много, но они занимательные.
Качайте скилы! До встречи через неделю.
Podchaser is the ultimate destination for podcast data, search, and discovery. Learn More