Как стать автором
Обновить
96.81

PHP *

Скриптовый язык общего назначения

Сначала показывать
Порог рейтинга
Уровень сложности

Анемичная модель предметной области и логика в сервисах

Уровень сложности Средний
Время на прочтение 21 мин
Количество просмотров 1.3K

Анемичная модель предметной области (Anemic domain model) это такая модель, где сущности содержат только свойства, а бизнес-логика находится в сервисах. Ее противоположность это богатая модель предметной области (Rich domain model), где логика находится в сущностях, а cервиcы рекомендуют писать только в редких случаях.

В этой статье я хочу показать, почему логика в сервисах является более правильным подходом. Мы рассмотрим пример бизнес-требований и их реализацию с Anemic domain model.

Читать далее
Всего голосов 6: ↑5 и ↓1 +4
Комментарии 3

Новости

Как я обновлял свой проект на Laravel c 10-й версии на 11-ю

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 2.9K

Сегодня, 12 марта 2024, года официально вышла Laravel 11. И все те, кто хочет обновится - добро пожаловать под кат!

Читать далее
Всего голосов 15: ↑10 и ↓5 +5
Комментарии 4

WordPress: разбор уязвимости в Discount Rules for WooCommerce

Уровень сложности Простой
Время на прочтение 2 мин
Количество просмотров 1K

Добрый день, уважаемые читатели! Сегодня мы разберем одну старую уязвимость в плагине Discount Rules for WooCommerce < 2.2.0 для WordPress.

WooCommerce - это плагин для создания онлайн-магазина на движке WordPress, а WooCommerce Discout Rules - дополнение для WooCommerсe для предоставления и управления скидками на товары.

Суть уязвимости заключается в возможности использовать некоторые методы плагина через admin-ajax.php, которые позволяют перечислять товары, пользователей, а самое главное - сделать товар бесплатным посредством добавления правила на скидку.

Читать далее
Всего голосов 7: ↑4 и ↓3 +1
Комментарии 2

Добавление своих команд для CLI в Joomla 4 и Joomla 5 с помощью плагина

Время на прочтение 18 мин
Количество просмотров 425

В Joomla, как и во многих других PHP фреймворках и движках, уже довольно давно (с версий 1.7.x) существует возможность работы с помощью CLI. С его помощью обычно решают те задачи, решение которых в веб-интерфейсе Joomla нецелесообразно из-за возможных ограничений веб-сервера - так называемые "тяжелые" задачи. Это может быть миграция большого количества контента со старой версии Joomla на новую, синхронизация данных с внешним источником по API (синхронизация цен и остатков, выгрузка заказов), работа с файлами и каталогами, выполнение пакетных заданий на больших объёмах и т.д. - всё то, что может занимать много времени и ресурсов сервера.

Как добавить свою команду в CLI интерфейс Joomla расскажет эта статья.

Читать далее
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 5

Истории

Пишем REST-приложение на Delphi

Уровень сложности Простой
Время на прочтение 7 мин
Количество просмотров 3.3K

Привет, Хабр!

Я Ануар, работаю в GlowByte и профессионально играю на нервах (шутка 😂).

К написанию статьи подвигла ситуация отсутствия в Рунете информации, как с использованием Delphi реализовать классическое трехзвенное приложение без использования фреймворков и каких-то приближенных к Microsoft технологий. Ниже следует текст немного в шутливой форме о мини-квесте «Как быстро написать распределенное многозвенное приложение на Delphi, использующее REST API». 

Целью было написать статью, которая бы коротко и ясно показывала, как реализовать такой функционал, так как не нашел статей и примеров именно по этой тематике и проблематике. Может, кому-то пригодится при освоении и понимании азов REST API. Возможно, кому-то статья покажется «для самых маленьких», но я надеюсь, что она будет полезна как в практическом смысле, так и теоретическом и поможет понять, как все это работает.

Поехали!
Всего голосов 14: ↑13 и ↓1 +12
Комментарии 52

Мы пилили монолит — много нас, а он один. Полезные советы от команды Яндекс Еды

Уровень сложности Простой
Время на прочтение 14 мин
Количество просмотров 13K

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

Распилить
Всего голосов 37: ↑35 и ↓2 +33
Комментарии 34

Как я обработал один миллиард строк в PHP

Уровень сложности Средний
Время на прочтение 12 мин
Количество просмотров 16K

Вероятно, вы уже слышали о соревновании под названием "The One Billion Row Challenge" (1brc), если же нет, то предлагаю ознакомиться с репозиторием 1brc Гуннара Морлинга.

Моё участие в проекте было мотивировано присутствием в нём двух моих коллег, которые достигли лидирующих позиций.

PHP не известен своими выдающимися скоростными показателями. Тем не менее, учитывая, что я работаю над профайлером PHP, я решил исследовать его производительность на примере этого вызова.

Читать далее
Всего голосов 76: ↑74 и ↓2 +72
Комментарии 33

Паттерн Aggregate Outside

Уровень сложности Средний
Время на прочтение 5 мин
Количество просмотров 5.6K

Руслан Гнатовский aka @Number55 в свой статье Когда ни туда, ни сюда, или в поисках оптимальной границы Domain слоя описал известную проблему протекания бизнес-логики из агрегата, в случае если эта логика зависит от данных которые находятся вне агрегата, и предложил несколько решений этой проблемы, каждое из которых не лишено недостатков. Многие из этих недостатков были описаны в статье а также в комментариях поэтому я не буду здесь дублировать эту информацию а попытаюсь предложить решение которое этих недостатков лишено.

Читать далее
Всего голосов 22: ↑22 и ↓0 +22
Комментарии 17

Joomla на FOSDEM 2024: запуск Альянса открытых веб-сайтов

Время на прочтение 5 мин
Количество просмотров 543

FOSDEM 2024 - масштабная конференция разработчиков ПО с открытым исходным кодом, насчитывающая тысячи участников и более шестидесяти конференц-залов. Президент Joomla Crystal Dionysopoulos присутствовала на этом мероприятии. Представители популярных платформ Joomla, Drupal, WordPress и Typo3 объединили усилия и запустили Альянс открытых веб-сайтов.

Читать далее
Всего голосов 4: ↑4 и ↓0 +4
Комментарии 0

Превращение событий PostgreSQL в события Laravel

Уровень сложности Простой
Время на прочтение 12 мин
Количество просмотров 3.8K

В прошлый раз я описал, как можно поставить задачу (Job) в очередь Laravel из хранимой процедуры или триггера PostgreSQL.

В этой статье я расскажу, как можно преобразовать события, возникающие в PostgreSQL, в события Laravel.

Рабочий пример выложен на GitHub.

Читать далее
Всего голосов 16: ↑15 и ↓1 +14
Комментарии 7

Подмена функций стандартной библиотеки PHP с помощью xepozz/internal-mocker

Уровень сложности Средний
Время на прочтение 3 мин
Количество просмотров 1K

Как в PHP заставить функции из стандартной библиотеки, например \time() или \date() выдать нужный результат?

С помощью инструмента xepozz/internal-mocker такое возможно сделать. Для этого необходимо выполнить несколько подготовительных шагов и можно запускать тесты в любом окружении.

Читать далее
Всего голосов 12: ↑12 и ↓0 +12
Комментарии 4

Управляем командами на Laravel

Уровень сложности Средний
Время на прочтение 3 мин
Количество просмотров 4.6K

Chronos for Laravel

Веб-интерфейс для управления командами Laravel в real-time без необходимости лезть в код проекта.

Читать далее
Всего голосов 21: ↑21 и ↓0 +21
Комментарии 6

Как мы приготовили массу блюд c помощью одного ингредиента: GraphQL

Уровень сложности Средний
Время на прочтение 12 мин
Количество просмотров 3.1K

Всем привет! Не говорите, что вам нечего приготовить, если у вас дома одна картошка. При смекалке и достаточном количестве специй — пюре, драники, запеканка, чипсы фри... Конечно, мы обсуждаем не кулинарию. Мне хотелось бы поговорить о GraphQL и некоторых фичах, которые мы внедрили у себя в компании, и тиражируем на различные проекты, где используется этот язык запросов.

Эта статья о базовой структуре, производительности, безопасности и гибкости GraphQL и будет интересна архитекторам, интеграторам, аналитикам и разработчикам, которые не ограничиваются рассмотрением информационных систем только с точки зрения «кода», а учитывают полный жизненный цикл системы, включая поддержку, развитие, систему управления знаниями и многое другое.

Читать далее
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 4

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн

Практический пример декомпозиции монолитного PHP приложения

Уровень сложности Средний
Время на прочтение 26 мин
Количество просмотров 6.6K

Декомпозиция монолита - не редкая проблема. Она возникала в большинстве компаний, где я работал. Происходит это потому, что на ранних стадиях развития любого стартапа накапливается так называемый decision debt - выбранная архитектура является оптимальной для быстрой разработки и экспериментирования, но не для зрелого продукта.

Учитывая популярность проблемы, существует множество книг и статей о подходах к её решению, но мне показалось, что есть недостаток практических примеров. Поэтому, в этой статье я сосредоточусь на технических деталях, используя в качестве примера приложение, написанное на PHP и фреймворке Symfony.

Читать далее
Всего голосов 28: ↑28 и ↓0 +28
Комментарии 6

Когда в первый рабочий день джуном смотришь на свои задачи…

Уровень сложности Простой
Время на прочтение 6 мин
Количество просмотров 56K

Привет, Хабр!

Собственно, а все ли поняли мем?

Человек прошел обучение, отбор посредством собеседования, имеет багаж знаний. После освоения навыков, набравшись практики (в наши дни стать junior-разработчиокм без практики нереально) добравшись до цели в виде трудоустройства. Не успев толком продышаться сразу сталкивается с такой вещью как бизнес процессы. Пытается понять что от него хотят коллеги по работе и как тут вообще все устроено. Он чувствует растерянность. Но тут стоит оговориться что бизнес это конкурентная среда. Там всем приходится непросто. Смотрите: программист это ремесленник, инструмент которым он пользуется сложный и не понятный - это его собственный мозг. Своим мозгом он обслуживает бизнес процессы. Решает задачи за счет которых приложение работодателя остается в рабочем состоянии и развиваются с точки зрения прибыли. Поток этих задач такой, что нет времени плавно погружаться в процесс, надо срочно в бой. Если вы не знакомы с программированием, взгляните на примеры кода и вы примерно ощутите тоже самое что junior-разработчик в свой первый рабочий день.

Читать далее
Всего голосов 31: ↑4 и ↓27 -23
Комментарии 111

Гудбай Pusher, привет Laravel Websockets

Уровень сложности Простой
Время на прочтение 2 мин
Количество просмотров 2.6K

Так получилось, что при создании очередного проекта для своих клиентов возникла необходимость реализовать уведомления пользователей о событиях да еще ко всему прочему запилить корпоративный чат.

Проект делается на Laravel 10 на стартере Breeze Inertia + Vue.js.

Историю как я придумывал саму логику уведомлений я оставлю как-нибудь на потом, а вот о том как я распрощался с Pusher я расскажу сейчас. Вообще Pusher, конечно, сервис хороший, но если брать бесплатные лимиты, то там всё достаточно грустно, поэтому я решил использовать что‑то другое в качестве альтернативы. Выбор пал на Laravel Websockets.

Для справки, Laravel Websockets — это такая надстройка над Laravel, которая на бэке использует Ratchet, но никаких особых настроек делать не нужно, всё работает практически «из коробки». Правда есть несколько подводных камней, о которых я тоже расскажу.

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 4

Laravel 11. Что нового?

Время на прочтение 6 мин
Количество просмотров 8.6K

Скоро Тейлор и его команда выпустят новую мажорную версию фреймворка. Расскажу, что на данный момент известно о ней.

Laravel 11 продолжает улучшения, начатые в Laravel 10.x, представляя упрощенную структуры приложения, посекундные ограничения скорости, маршруты проверки здоровья приложения, изящную ротацию ключа шифрования, улучшения тестирования очередей, почтовый транспорт Resend, интеграцию валидатора Prompt, новые команды Artisan и многое другое. Кроме того, был представлен Laravel Reverb — масштабируемый WebSocket-сервер обеспечивающий надежную работу в режиме реального времени.

Читать далее
Всего голосов 20: ↑19 и ↓1 +18
Комментарии 4

Модификация JSON респонсов в Laravel

Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 3.3K

Вчера я опубликовал перевод статьи на тему оптимизации использования респонсов в Laravel с "простейшими" данными. То есть когда в ответ нужно отдать какое-то число, строку, массив или объект. Но что делать если приложение построено на использовании Json Resource? Или ещё больше - нужно изменить уровень вложенности данных, возвращаемых коллекцией? Давайте разбираться!

Читать далее
Всего голосов 10: ↑10 и ↓0 +10
Комментарии 2

Как ошибки проектирования при разработке на Symfony могут привести к перерасходу ресурсов и замедлению работы системы

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 3.6K

Сегодня хочу рассказать о том, какие ошибки можно допустить на начальном этапе создания e-commerce проекта в проектировании модели данных и в разработке веб-приложения. И, самое главное, как эти ошибки исправить: снизить потребление памяти в 1000 раз и кратно уменьшить нагрузку на дисковую систему. Кейс основан на реальных событиях, однако без упоминания компаний в связи с политикой конфиденциальности и профессиональной этикой.

Читать далее
Всего голосов 26: ↑26 и ↓0 +26
Комментарии 5

Как я писал свою библиотеку для работы с Telegram

Уровень сложности Средний
Время на прочтение 5 мин
Количество просмотров 6.5K

В далекий 2019 год, когда про ковид никто не слышал и других жестей еще не было на горизонте, я читал очередную статью как “правильно” писать очередного бота на телеграм. И в очередной раз у меня крутилась мысль: че код так паршиво выглядит то? Где-то в то время телеграм еще был на хайпе, я упражнялся в ботописании, каждый второй выходец из онлайн школы программирования пытался объяснить окружающим как писать боты на телеграм. Глядя на это все, возник вопрос: а как оно должно выглядеть, чтоб мне понравилось ? Дальше речь пойдет про субъективщину и избавление от фатального недостатка. А я Саша, на тот момент был php разработчиком, а сейчас дожил до лида в Kokoc group.

Читать далее
Всего голосов 17: ↑16 и ↓1 +15
Комментарии 9

Вклад авторов

Работа

PHP программист
159 вакансий