uk
Feedback
Deworker Pro

Deworker Pro

Відкрити в Telegram
1 411
Підписники
Немає даних24 години
-37 днів
-130 день
Архів дописів
Запускаем трансляцию. Ссылка добавлена в пост. Если её нет, то обновите страницу.

Напоминаем участникам, что сегодня в 18:00 по московскому времени проведём наш стрим про разделение кода на модули и микросервисы. Рассмотрим идеи и принципы и закрепим их живым разбором подходящих примеров. Поотвечаем на ваши вопросы по этой теме и частично разберём ваши предметные области. А у остальных зрителей ещё есть возможность приобрести участие и запись до финального повышения цены.

Начинаем сегодня в 18:00 по московскому времени

До повышения цены на наш стрим осталось всего 2 часа 27 минут. А пока участникам и зрителям будет полезен мой прошлый доклад на смежную тему про вертикальное разделение кода, тестов и конфигурации приложения. Добавил доклад в список полезного в наш пост.

До повышения цены осталось всего 5 часов и 57 минут

Исследование доменной модели у нас уже скоро. Но помимо аукциона нам будет крайне полезно рассмотреть примеры и из других предметных областей. Для этого помимо скринкастов по аукциону мы проведём отдельный большой обобщающий практический стрим.

Мы дошли до программирования доменной модели аукциона. У нас уже есть подробное задание, которое теперь нужно реализовать в коде. Нужно будет разобраться с доменными контекстами, пройтись по пользовательским сценариям и продумать, какие у нас будут команды, агрегаты и события. Для этого мы вскоре рассмотрим Event Driven архитектуру и воспользуемся мощной практикой моделирования Event Storming. Дабы не загромождать основную серию скринкастов мы вынесем это всё в отдельный плейлист по доменной модели. Так что пока вы можете нас догнать, если ещё не досмотрели предыдущие эпизоды. И до встречи в новых скринкастах!

После написания ServerRequest и Response пора рассмотреть случаи, когда нам понадобится модификация запросов и ответов для служебных целей. Сегодня этим и займёмся. Поговорим про работу PHP с примитивами и объектами. Рассмотрим возможные проблемы и риски использования изменяемых объектов с сеттерами для запроса и ответа. Расскажем про иммутабельность и напишем надёжный код, избавленный от этих рисков. Заодно упростим код формирования ответа и добавим поддержку множественных HTTP-заголовков.

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

Наш код формирования страницы не обращается к массивам PHP-FPM для получения запроса, но до сих пор вызывает SAPI для отправки ответа. Сегодня избавимся от этой привязки и сделаем код страницы полностью независимым от используемого сервера структурой HTTP Response. Заодно реализуем экономную отдачу больших файлов средствами PHP через Stream.

В прошлом эпизоде мы поняли, что прямая работа с суперглобальными массивами привязывает нас к конкретному серверу и неудобна при тестировании. Сегодня от этого перейдём к внедрению серверонезависимой структуры ServerRequest. Напишем для неё фабрику и для удобства перейдём на объекты-значения вместо скалярных полей.

У нас есть функция определения языка с прямым обращением к суперглобальным массивам PHP-FPM. Но такой подход неуниверсален и неудобен при тестировании. Сегодня попробуем к этой функции написать unit-тесты и найти проблемы использования глобальных переменных и синглтонов. Познакомимся с неудобством побочных эффектов и с тестированием чистых функций.

Мы подготовили структуру проекта HTTP-фреймворка и разобрались с работой сервера. Теперь применим это на практике. Сегодня создадим более сложную главную страницу с получением параметров HTTP-запроса и отправкой дополнительных заголовков ответа через SAPI при работе через PHP-FPM. Заодно напишем первый вариант функции определения текущего языка и подумаем, что с ней не так.

Пока записывается следующий мегаскринкаст про запрос и ответ мы переобработали и дополнили эпизод про каркас проекта. Помимо PHPUnit добавлена установка и интеграция CS Fixer и Psalm: https://t.me/deworkerpro/114

Взгляд изнутри Подготовка материала – это хорошо, но ведение проекта этим не ограничивается. Есть ещё много задач, размышлений и рутинных дел. О внутренней работе и своих впечатлениях нам обычно рассказывает Юлия у себя в @elisjuli_live. На этот раз она делится результатами после жаркого лета.

Команды в контроллерах мы до сих пор заполняли данными из JSON-запросов вручную. Это неудобно. И любое несоответствие типов приведёт к ошибке 500 Server Error. Вместо этого упростим себе работу и автоматизируем ввод и вывод JSON для наших запросов и команд с помощью компонента Serializer. И сделаем красивый вывод списка ошибок типов при неверных запросах.

Впереди у нас подключение Serializer и проектирование доменной модели аукциона. А пока перед этими темами завершим начатое ранее обновление конфигурации Doctrine ORM и переведём её консольные команды на инъекцию зависимостей в конструктор. Заодно перепишем структуры на использование модификатора readonly и переведём сервисы на синтаксис с constructor property promotion. Поворим, где это уместно, а где не очень.

Для FREE-доступа открыт мегаскринкаст про работу HTTP-сервера с PHP и про частые заблуждения, с этим связанные. Если у вас скоро собеседование, то будет особенно полезно.

После типизации наших E2E-тестов пора перейти к пошаговому добавлению типизации фронтенда, учитывая разные нюансы. Как раз этим займёмся в сегодняшнем мегаскринкасте про внедрение TypeScript в проект на ReactJS. Помимо всех страниц проставим типы компоненту FeatureToggle и полностью типизируем AuthProvider. Проверим, сколько недочётов было в нашем коде. Заодно напишем фейковый провайдер аутентификации для оборачивания им других компонентах в юнит-тестах.

Когда разобрались с видами типизации и с TypeScript пришла пора внедрить всё это в наш проект. Сегодня проведём полную интеграцию с CucumberJS для наших E2E-тестов и исправим все недочёты, которые при этом найдём.