В прошлом эпизоде мы поняли, что прямая работа с суперглобальными массивами привязывает нас к конкретному серверу и неудобна при тестировании.
Сегодня от этого перейдём к внедрению серверонезависимой структуры ServerRequest. Напишем для неё фабрику и для удобства перейдём на объекты-значения вместо скалярных полей.
Сегодня от этого перейдём к внедрению серверонезависимой структуры ServerRequest. Напишем для неё фабрику и для удобства перейдём на объекты-значения вместо скалярных полей.
deworker.pro
Данные запроса и ServerRequest
Абстракция для серверного запроса для отхода от привязки к PHP-FPM. Переход от суперглобальных массивов к серверонезависимой структуре ServerRequest.
Наш код формирования страницы не обращается к массивам PHP-FPM для получения запроса, но до сих пор вызывает SAPI для отправки ответа.
Сегодня избавимся от этой привязки и сделаем код страницы полностью независимым от используемого сервера структурой HTTP Response.
Заодно реализуем экономную отдачу больших файлов средствами PHP через Stream.
Сегодня избавимся от этой привязки и сделаем код страницы полностью независимым от используемого сервера структурой HTTP Response.
Заодно реализуем экономную отдачу больших файлов средствами PHP через Stream.
deworker.pro
Ответ Response и SAPI Emitter
Избавление от зависимости от сервера PHP-FPM при отправке HTTP-ответа. Экономная отдача больших файлов средствами PHP через Stream.
По вашим просьбам на сайте появилась возможность оплачивать подписку от имени организации или предпринимателя за своих сотрудников.
Если вы работодатель, то теперь можете зайти в кабинете в корпоративный раздел и подключить своих сотрудников.
Если вы сотрудник, то можете обратиться к своему работодателю, чтобы он подключил вас.
Если вы работодатель, то теперь можете зайти в кабинете в корпоративный раздел и подключить своих сотрудников.
Если вы сотрудник, то можете обратиться к своему работодателю, чтобы он подключил вас.
deworker.pro
Оплата для юридических лиц и ИП
Появилась возможность оплачивать подписку на скринкасты от имени организаций и индивидуальных предпринимателей за своих сотрудников.
После написания ServerRequest и Response пора рассмотреть случаи, когда нам понадобится модификация запросов и ответов для служебных целей.
Сегодня этим и займёмся.
Поговорим про работу PHP с примитивами и объектами. Рассмотрим возможные проблемы и риски использования изменяемых объектов с сеттерами для запроса и ответа. Расскажем про иммутабельность и напишем надёжный код, избавленный от этих рисков.
Заодно упростим код формирования ответа и добавим поддержку множественных HTTP-заголовков.
Сегодня этим и займёмся.
Поговорим про работу PHP с примитивами и объектами. Рассмотрим возможные проблемы и риски использования изменяемых объектов с сеттерами для запроса и ответа. Расскажем про иммутабельность и напишем надёжный код, избавленный от этих рисков.
Заодно упростим код формирования ответа и добавим поддержку множественных HTTP-заголовков.
deworker.pro
Постпроцессинг и иммутабельность
Препроцессинг HTTP-запроса перед и постпроцессинг ответа после формирования страницы. Потенциальные проблемы изменяемых объектов и их решение через иммутабельность.
Мы дошли до программирования доменной модели аукциона. У нас уже есть подробное задание, которое теперь нужно реализовать в коде.
Нужно будет разобраться с доменными контекстами, пройтись по пользовательским сценариям и продумать, какие у нас будут команды, агрегаты и события.
Для этого мы вскоре рассмотрим Event Driven архитектуру и воспользуемся мощной практикой моделирования Event Storming.
Дабы не загромождать основную серию скринкастов мы вынесем это всё в отдельный плейлист по доменной модели.
Так что пока вы можете нас догнать, если ещё не досмотрели предыдущие эпизоды. И до встречи в новых скринкастах!
Нужно будет разобраться с доменными контекстами, пройтись по пользовательским сценариям и продумать, какие у нас будут команды, агрегаты и события.
Для этого мы вскоре рассмотрим Event Driven архитектуру и воспользуемся мощной практикой моделирования Event Storming.
Дабы не загромождать основную серию скринкастов мы вынесем это всё в отдельный плейлист по доменной модели.
Так что пока вы можете нас догнать, если ещё не досмотрели предыдущие эпизоды. И до встречи в новых скринкастах!
Исследование доменной модели у нас уже скоро. Это будет в новых скринкастах.
Но помимо аукциона нам будет крайне полезно рассмотреть примеры и из других предметных областей.
Для этого помимо скринкастов по аукциону мы проведём отдельный большой обобщающий практический стрим.
Успейте записаться к нам и до встречи в эфире!
Но помимо аукциона нам будет крайне полезно рассмотреть примеры и из других предметных областей.
Для этого помимо скринкастов по аукциону мы проведём отдельный большой обобщающий практический стрим.
Успейте записаться к нам и до встречи в эфире!
deworker.pro
Идеи разделения на модули и микросервисы
Большой стрим про декомпозицию предметной области и идеи разделения кода на модули и микросервисы
Deworker Pro
Исследование доменной модели у нас уже скоро. Это будет в новых скринкастах. Но помимо аукциона нам будет крайне полезно рассмотреть примеры и из других предметных областей. Для этого помимо скринкастов по аукциону мы проведём отдельный большой обобщающий…
До повышения цены на наш стрим осталось всего 2 часа 24 минуты. А пока участникам и зрителям будет полезен мой прошлый доклад на смежную тему про вертикальное разделение кода, тестов и конфигурации приложения. Добавил доклад в список полезного в наш пост.
deworker.pro
Идеи разделения на модули и микросервисы
Большой стрим про декомпозицию предметной области и идеи разделения кода на модули и микросервисы
Напоминаем участникам, что сегодня в 18:00 по московскому времени проведём наш стрим про разделение кода на модули и микросервисы. Рассмотрим идеи и принципы и закрепим их живым разбором подходящих примеров. Поотвечаем на ваши вопросы по этой теме и частично разберём ваши предметные области.
А у остальных зрителей ещё есть возможность приобрести участие и запись до финального повышения цены.
А у остальных зрителей ещё есть возможность приобрести участие и запись до финального повышения цены.
deworker.pro
Идеи разделения на модули и микросервисы
Большой стрим про декомпозицию предметной области и идеи разделения кода на модули и микросервисы
Спасибо участникам за отличную компанию! Вначале по традиции поборолись с техникой, но в итоге стрим удался.
В карточке сейчас вывели ссылку на оригинальную запись. В будущем постараемся немного смонтировать видео и убрать различные заминки, чтобы всё смотрелось более интересно. Ещё в посте выложили изображения, нарисованные нами на стриме. Может кому-то пригодятся.
В карточке сейчас вывели ссылку на оригинальную запись. В будущем постараемся немного смонтировать видео и убрать различные заминки, чтобы всё смотрелось более интересно. Ещё в посте выложили изображения, нарисованные нами на стриме. Может кому-то пригодятся.
deworker.pro
Идеи разделения на модули и микросервисы
Большой стрим про декомпозицию предметной области и идеи разделения кода на модули и микросервисы
Мы редко пишем весь проект полностью с нуля. Вместо этого мы активно используем готовые компоненты от других программистов, подключая через Composer.
И если у нас несколько проектов, то может возникнуть желание вынести свой код в отдельную библиотеку, чтобы использовать её у себя или даже поделиться публично.
Но если код сильно связан с остальным кодом проекта или фреймворка, то вынести его в отдельную библиотеку весьма сложно.
Сегодня как раз рассмотрим повторное использование кода и на примере нашей функции покажем способы избавления от лишних связей через инверсию зависимостей.
И в итоге для написания переносимого кода перейдём на PSR-7 и совместимые с ним готовые компоненты.
И если у нас несколько проектов, то может возникнуть желание вынести свой код в отдельную библиотеку, чтобы использовать её у себя или даже поделиться публично.
Но если код сильно связан с остальным кодом проекта или фреймворка, то вынести его в отдельную библиотеку весьма сложно.
Сегодня как раз рассмотрим повторное использование кода и на примере нашей функции покажем способы избавления от лишних связей через инверсию зависимостей.
И в итоге для написания переносимого кода перейдём на PSR-7 и совместимые с ним готовые компоненты.
deworker.pro
Повторное использование кода и PSR-7
Повторное использование кода в разных проектах. Инверсия зависимостей для выноса кода в компонент. Выделение общих интерфейсов и переход на PSR-7.
После перехода на PSR-7 мы уже понимаем, как делать переносимыми функции, которые работают с переданным им Request-ом. Но пока не знаем, что делать с функциями, которые у себя создают Response.
Поэтому помимо других инверсий сегодня рассмотрим инверсию контроля за созданием зависимостей. Это нам позволит отвязаться от конкретных классов и понять причины появления PSR-17.
Помимо этого рассмотрим заблуждение многих PHP-програмистов при написании анонимных функций. Почему класс для них назван Closure и являются ли все анонимные функции замыканиями.
Поэтому помимо других инверсий сегодня рассмотрим инверсию контроля за созданием зависимостей. Это нам позволит отвязаться от конкретных классов и понять причины появления PSR-17.
Помимо этого рассмотрим заблуждение многих PHP-програмистов при написании анонимных функций. Почему класс для них назван Closure и являются ли все анонимные функции замыканиями.
deworker.pro
Фабрики запросов и ответов PSR-17
Решение проблемы зависимости от создания объектов из конкретных классов. Инверсия создания зависимых объектов и переход на PSR-17
Начинаем моделирование предметной области проекта аукциона.
Сегодня рассмотрим домен и поддомены для нашего бизнеса с точки зрения DDD. Перейдём на Event Driven архитектуру для проведения сложных бизнес-процессов в системе слабосвязанных модулей.
Поговорим про сложности моделирования и познакомимся с практикой Event Storming для построения цепочек команд и событий.
Сегодня рассмотрим домен и поддомены для нашего бизнеса с точки зрения DDD. Перейдём на Event Driven архитектуру для проведения сложных бизнес-процессов в системе слабосвязанных модулей.
Поговорим про сложности моделирования и познакомимся с практикой Event Storming для построения цепочек команд и событий.
deworker.pro
DDD и Event Driven архитектура
Моделирование предметной области бизнеса в DDD. Домены и поддомены. Event Driven архитектура слабосвязанных модулей. Практика Event Storming для построения цепочек команд и событий.
Помимо комментариев на сайте много обсуждений проходит в разных чатах. Но полезные ответы в них безнадёжно теряются.
Чтобы это решить мы в разделе с вопросами и ответами открываем новую ветвь, куда будем цитировать свои ответы из чатов и из других переписок.
Сегодня опубликованы первые 7 вопросов и ответов.
Приятного чтения!
https://deworker.pro/qna/questions
Чтобы это решить мы в разделе с вопросами и ответами открываем новую ветвь, куда будем цитировать свои ответы из чатов и из других переписок.
Сегодня опубликованы первые 7 вопросов и ответов.
Приятного чтения!
https://deworker.pro/qna/questions
Новые зрители (и те, кто повторно пересматривал прошлые эпизоды) сталкивались с трудностью, что код из репозитория аукциона не запускался на предыдущих коммитах из-за несовместимости со свежими Composer или Xdebug.
Сейчас это исправлено. Репозитоий перепроверен и во всех ключевых коммитах в Dockerfile вписаны совместимые версии. Теперь проект успешно запускается командой
Если вы раньше клонировали к себе репозиторий, то склонируйте его снова или загрузите новую историю через git fetch.
Сейчас это исправлено. Репозитоий перепроверен и во всех ключевых коммитах в Dockerfile вписаны совместимые версии. Теперь проект успешно запускается командой
make init из любого предыдущего коммита.Если вы раньше клонировали к себе репозиторий, то склонируйте его снова или загрузите новую историю через git fetch.
Разработка разработкой, но помимо неё приходят интересные новшества. Теперь устанавливать и работать с Docker Compose стало проще. В связи с этим сегодня переведём на новый Compose V2 наш проект вручную и наши Jenkins и Registry серверы автоматизированно через Ansible.
deworker.pro
Docker Compose V2
Перевод проектов на плагин Docker Compose V2. Установка на Jenkins-сервер с помощью Ansible.
С прошлого эпизода про Event Driven у нас остался удобный черновик программной системы.
Пора по нему построить настоящую диаграмму со всеми элементами Event Storming и узнать про трудности, которые в этом процессе возникают.
Потом упростить моделирование большого проекта разделением на удобные этапы на примере службы перевозки грузов.
Пора по нему построить настоящую диаграмму со всеми элементами Event Storming и узнать про трудности, которые в этом процессе возникают.
Потом упростить моделирование большого проекта разделением на удобные этапы на примере службы перевозки грузов.
deworker.pro
Элементы и этапы Event Storming
Диаграмма Event Storming и её элементы. Разделение на этапы для работы над сложными проектами. Пример моделирования службы доставки грузов.
Deworker Pro
Начинаем моделирование предметной области проекта аукциона. Сегодня рассмотрим домен и поддомены для нашего бизнеса с точки зрения DDD. Перейдём на Event Driven архитектуру для проведения сложных бизнес-процессов в системе слабосвязанных модулей. Поговорим…
Большой эпизод про DDD и Event Driven архитектуру для построения слабосвязанных систем открыт для общего доступа.
Приятного просмотра всем, кто его ещё не видел или хочет пересмотреть всё заново!
Приятного просмотра всем, кто его ещё не видел или хочет пересмотреть всё заново!
deworker.pro
DDD и Event Driven архитектура
Моделирование предметной области бизнеса в DDD. Домены и поддомены. Event Driven архитектура слабосвязанных модулей. Практика Event Storming для построения цепочек команд и событий.
Наша сессия Event Storming для аукциона будет эпичной. Уже записываем группу скринкастов по этапу Big Picture. Полностью проработаем управление лотами, торги, оплаты и все этапы сделки. А пока догоняйте нас в этой серии, если ещё не всё посмотрели.
От примера с грузоперевозками переходим к реальному моделированию. Запускаем сессию Event Storming и сегодня строим большую картину этапа Big Picture. Прорабатываем создание и уточнение лота, автоматическую и ручную модерации лота для запуска торгов.
deworker.pro
Big Picture: Общая картина и события
Первый этап Event Storming. Анализ доменной модели и первоначальное определение потоков доменных событий.
📌 Новые ответы на ваши вопросы
Наш раздел пополнился четырьмя вопросами ⬇️
❓Как перейти на Symfony и разделить проект?
У меня есть проект, который по факту несколько веб сайтов: бекенд, фронтенд и API на разных доменах. Через API происходят все запросы, начиная от логина, заканчивая выборкой статей и товаров. Сейчас это всё на Zend монолите с ужасным кодом. Решил перейти на Symfony. Но теперь вопрос: как эти три сервиса разнести?
❓Выбор PHP фреймворка
Хочу узнать ваше субъективное мнение по поводу выбора PHP фреймворка как основного для разработки сайтов. Нужно начинать пользоваться фреймворком, но пока стою перед выбором из Laravel, Symfony и Yii. В будущем возможно придется поработать на каждом, но начать хочу с того, какой содержит в себе лучшие практики проектирования.
❓Как парсить большие XLS-документы?
Что лучше использовать для парсинга больших XLS документов, где внутри для каждой строки нужно делать много проверок в соответствующих полях, формировать массив и записывать в базу. И в последующих импортах нужно будет и редактировать те что уже записаны и вносить изменения. Это очень трудоемкая операция. Работаю на PHP использую PHPOffice. Может стоит написать самому или использовать какой то NodeJS.
❓Где брать компоненты для микрофреймворков
Микрофреймворки предоставляют минимальный набор компонентов, но где брать остальное: например, валидацию форм, работу с сессиями, Redis и т.п.? Есть ли некий список общепризнанных, актуальных и поддерживаемых компонентов "де-факто", и если да, можно ли его где-то найти?
Переходите по ссылкам и присоединяйтесь к диалогу в комментариях.
Наш раздел пополнился четырьмя вопросами ⬇️
❓Как перейти на Symfony и разделить проект?
У меня есть проект, который по факту несколько веб сайтов: бекенд, фронтенд и API на разных доменах. Через API происходят все запросы, начиная от логина, заканчивая выборкой статей и товаров. Сейчас это всё на Zend монолите с ужасным кодом. Решил перейти на Symfony. Но теперь вопрос: как эти три сервиса разнести?
❓Выбор PHP фреймворка
Хочу узнать ваше субъективное мнение по поводу выбора PHP фреймворка как основного для разработки сайтов. Нужно начинать пользоваться фреймворком, но пока стою перед выбором из Laravel, Symfony и Yii. В будущем возможно придется поработать на каждом, но начать хочу с того, какой содержит в себе лучшие практики проектирования.
❓Как парсить большие XLS-документы?
Что лучше использовать для парсинга больших XLS документов, где внутри для каждой строки нужно делать много проверок в соответствующих полях, формировать массив и записывать в базу. И в последующих импортах нужно будет и редактировать те что уже записаны и вносить изменения. Это очень трудоемкая операция. Работаю на PHP использую PHPOffice. Может стоит написать самому или использовать какой то NodeJS.
❓Где брать компоненты для микрофреймворков
Микрофреймворки предоставляют минимальный набор компонентов, но где брать остальное: например, валидацию форм, работу с сессиями, Redis и т.п.? Есть ли некий список общепризнанных, актуальных и поддерживаемых компонентов "де-факто", и если да, можно ли его где-то найти?
Переходите по ссылкам и присоединяйтесь к диалогу в комментариях.
Помимо отдельных вопросов сегодня добавлено много интересных вопросов с подробными ответами из комментариев:
https://deworker.pro/qna/comments
https://deworker.pro/qna/comments