Как стать автором
Обновить
19
0
Александр Денисюк @denisyukphp

PHP-программист

Готовим версионирование API в PHP-фреймворках: разбор способов и работа с организацией кода

Уровень сложности Простой
Время на прочтение 13 мин
Количество просмотров 5.6K
Блог компании Skyeng Разработка веб-сайтов *PHP *Symfony *
Обзор

Привет! Меня зовут Олег Мифле. В Skyeng работаю над проектом Skypro. В IT я уже больше десяти лет, семь из которых пишу на PHP. За плечами десятки разных проектов: e-commerce, финтех, CRM, а недавно добавился и EdTech. Были и классические фуллстек-проекты, и проекты, где фронтенд и бэкенд «живут» отдельно и коммуницируют друг с другом по API. Боль от отсутствия версионирования я испытал на себе. Хочу поделиться, как избежать проблем, как всё структурировать и организовать.

Обсудим:

• Что такое API.

• Зачем версионировать API и нужно ли вообще.

• Какие способы версионирования существуют и как его организовать — и с точки зрения подходов, и с точки зрения кода.

• Разберёмся, когда избавляться от старой версии или как жить с легаси до конца существования проекта.

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

Асинхронность, конкурентность, параллельность, многопоточность — разбираемся «по понятиям» :)

Время на прочтение 15 мин
Количество просмотров 18K
PHP *Symfony *Laravel *

Эта статья представляет собой краткий (шутка!) конспект одноименного (почти) вебинара, недавно проведенного автором.

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

Ну и немного раскрыть глаза на то, что, оказывается в PHP есть и асинхронность, и многопоточность, и в общем-то не нужно ждать мифической версии PHP 10, чтобы начать их использовать уже прямо сейчас!

Лонг-рид с кодом ждёт вас!
Всего голосов 31: ↑31 и ↓0 +31
Комментарии 19

Что такое слои блокчейна L0, L1, L2 и L3 и зачем они нужны

Время на прочтение 3 мин
Количество просмотров 9.6K
Криптовалюты

В последнее время в новостях все чаще и чаще упоминаются L-слои блокчейна (например, инвестиционный фонд A16z вкладывается в L2 решение на Ethereum Optimism или L3 компания Orbs расширяет свое решение на блокчейн TON).

Концепция слоев — это категоризация блокчейнов, необходимая для быстрого понимания как тот или иной проект вписывается в экосистему в целом. В этой статье мы разберем что такое слои L0, L1, L2 и L3, зачем они нужны и рассмотрим примеры.

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

Паттерны отказоустойчивости приложений в Kubernetes

Время на прочтение 22 мин
Количество просмотров 6.2K
Блог компании Газпромбанк Анализ и проектирование систем *Серверное администрирование *Управление проектами *
Балансировщики падают, контроллеры зависают, а дата-центры атакуют экскаваторы. Это нормальная история. Мы живём в мире, где нет ничего надёжного на 100 %, а любой бит в планке оперативной памяти может внезапно перещёлкнуться из-за пролетевшей космической частицы.

Другое дело, что даже в условиях постоянных рисков отказа отдельных элементов нам нужно обеспечить работоспособность инфраструктуры в целом. Клиент не должен заметить, что где-то отказал контейнер с php-fpm или одна из серверных стоек выпала из сети.

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


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

Yii3 Overview 2. Вспомогательные инструменты разработки

Время на прочтение 7 мин
Количество просмотров 3.2K
PHP *Yii *GitHub *

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

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

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

Domain-Driven Design: стратегическое проектирование. Часть 1

Время на прочтение 14 мин
Количество просмотров 94K
Программирование *Проектирование и рефакторинг *


Здравствуйте, хабрапользователи! В этой статье речь пойдет о предметно-ориентированном проектировании программного обеспечения с использованием, в первую очередь, стратегических шаблонов. Вторую часть – про тактическое проектирование – читайте здесь.

Данный подход использовал Вон Вернон в своей книге «Реализация методов предметно-ориентированного проектирования». Цель написания этой книги: дать возможность разработчикам совершить полет на самолете DDD (в детстве автор зачастую путешествовал со своей семьей на небольших самолетах). Вид с высоты дает более широкое представление о проблемах моделирования, не давая застрять в различных технических деталях. Наблюдая ландшафт DDD таким способом, можно осознать преимущества как стратегического, так и технического проектирования. Подробнее – под катом!
Читать дальше →
Всего голосов 25: ↑24 и ↓1 +23
Комментарии 62

Замена EAV на JSONB в PostgreSQL

Время на прочтение 6 мин
Количество просмотров 17K
PostgreSQL *SQL *Хранение данных *
Перевод
TL; DR: JSONB может значительно упростить разработку схемы БД без ущерба производительности в запросах.

Введение


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

Самый простой путь решения этой проблемы – это создание столбца в таблице БД для каждого значение свойства, и просто заполнять те, которые нужны для определенного экземпляра сущности. Отлично! Проблема решена… до того момента, пока ваша таблица не содержит миллионы записей и у вас не возникнет необходимость добавить новую запись.

Рассмотрим паттерн EAV (Entity-Attribute-Value), он встречается достаточно часто. Одна таблица содержит сущности (записи), другая таблица содержит имена свойств (атрибутов), а третья таблица связывает сущности с их атрибутами и содержит значение этих атрибутов для текущей сущности. Это дает вам возможность иметь разные наборы свойств для разных объектов, а также добавлять свойства “на лету”, не изменяя структуры БД.
Читать дальше →
Всего голосов 41: ↑36 и ↓5 +31
Комментарии 39

SQL HowTo: разные варианты работы с EAV

Время на прочтение 3 мин
Количество просмотров 11K
Блог компании Тензор PostgreSQL *SQL *Администрирование баз данных *ERP-системы *

Соблазн использовать модель EAV (Entity-Attribute-Value) при организации структуры БД весьма велик, особенно когда предметная область заранее плохо известна (или разработчик просто не хочет в нее углубляться). Это ведь так удобно - создать "универсальный" способ описания характеристик объектов, который больше не потребует доработок базы ни при появлении новых типов объектов, ни при возникновении новых атрибутов...

Однако, за любую универсальность приходится платить сложностью и производительностью запросов - так что json[b] может оказаться более эффективной заменой. Но если уж такая модификация невозможна - давайте попробуем выжать максимум производительности из доставшегося нам legacy на самом простом примере.

Читать далее
Всего голосов 24: ↑23 и ↓1 +22
Комментарии 7

30 команд Git, необходимых для освоения интерфейса командной строки Git

Время на прочтение 9 мин
Количество просмотров 242K
Блог компании RUVDS.com Системное администрирование *Git *GitHub *
Перевод

Git — самая популярная в мире распределённая система контроля версий. Линус Торвальдс, разработчик ядра ОС Linux, создал этот инструмент ещё в 2005 году, а сегодня Git активно поддерживается как проект с открытым исходным кодом. Огромное количество открытых и коммерческих проектов используют Git для контроля версий.

В данной статье перечисляются самые основные команды, которые следует знать разработчику, чтобы освоить управление репозиториями GitHub на высоком уровне. Ознакомиться с ними будет полезно как новичкам, так и опытным разработчикам.
Читать дальше →
Всего голосов 84: ↑69 и ↓15 +54
Комментарии 63

Оптимистическая блокировка коллекций Агрегата при использовании Doctrine

Время на прочтение 9 мин
Количество просмотров 3.7K
PHP *Symfony *Doctrine ORM *
Из песочницы

Проектирование своего проекта по DDD последнее время становится всё более популярным. Сейчас не будем углубляться в данную методологию с её принципами, плюсами и минусами. Я хочу рассказать с какой проблемой столкнулась наша команда при использовании данной методологии на PHP, а именно внедрении Data Mapper’а Doctrine ORM.

Чтобы более понятно донести нашу проблему я буду использовать известный всем Агрегат Заказа (Order) и позиции заказа (OrderLine), которые являются коллекциями Dortrine ORM. Так же сильно упростим данный агрегат, чтобы фокусироваться на самой проблеме. И так начинаем!

Для начала мы создадим наш агрегат заказа.

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

Понимаем JIT в PHP 8

Время на прочтение 7 мин
Количество просмотров 27K
Блог компании OTUS PHP *Программирование *
Перевод
Перевод статьи подготовлен в преддверии старта курса «Backend-разработчик на PHP»




TL;DR


Компилятор Just In Time в PHP 8 реализован как часть расширения Opcache и призван компилировать операционный код в инструкции процессора в рантайме.

Это означает, что с JIT некоторые операционные коды не должны интерпретироваться Zend VM, такие инструкции будут выполняться непосредственно как инструкции уровня процессора.
Читать дальше →
Всего голосов 25: ↑23 и ↓2 +21
Комментарии 12

Cohesion и Coupling: отличия

Время на прочтение 6 мин
Количество просмотров 32K
Программирование *Анализ и проектирование систем *Совершенный код *Проектирование и рефакторинг *ООП *
Перевод

Эта статья является переводом материала «Cohesion and Coupling: the difference». 

Возможно, вы слышали рекомендацию, в которой говорится, что мы должны стремиться к достижению low coupling (низкой связанности) и high cohesion (высокого сцепления) при работе над кодовой базой. В этой статье хотелось бы обсудить, что на самом деле означает эта рекомендация, и взглянуть на некоторые примеры кода, иллюстрирующие ее. И также хочется провести границу между этими двумя идеями и показать различия в них.

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

Dependency Injection в мире Software Engineering

Время на прочтение 22 мин
Количество просмотров 24K
Блог компании AvitoTech PHP *Программирование *Совершенный код *ООП *
✏️ Технотекст 2021

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

Читать далее
Всего голосов 29: ↑28 и ↓1 +27
Комментарии 9

CQS (CQRS) со своим блэкджеком

Время на прочтение 7 мин
Количество просмотров 13K
Программирование *Совершенный код *.NET *C# *
Command-query separation (CQS) — это разделение методов на read и write.

Command Query Responsibility Segregation (CQRS) — это разделение модели на read и write. Предполагается в одну пишем, с нескольких можем читать. М — масштабирование.

Этот подход часто используют как способ организации кода, даже если хранилище одно. Но как всегда, в реальных более-менее сложных проектах эта штука дает сбой.
Читать дальше →
Всего голосов 4: ↑4 и ↓0 +4
Комментарии 12

Git, я хочу все отменить! Команды исправления допущенных ошибок

Время на прочтение 4 мин
Количество просмотров 36K
Блог компании Skillbox Программирование *Git *Лайфхаки для гиков
Перевод
image

Git — удобная, но довольно сложная система. Сложность, прежде всего, в том, что по невнимательности можно допустить ошибку, которую затем сложно или вообще невозможно исправить. Документация Git предоставляет описание множества команд, которые дают возможность исправить ошибку.

Но вся штука в том, что для исправления проблемы нужно знать точное название команды. И здесь у нас возникает типичная проблема курицы и яйца. В этой статье рассказывается о командах, которые помогают решить проблемные ситуации.
Читать дальше →
Всего голосов 34: ↑27 и ↓7 +20
Комментарии 20

Redis Best Practices, часть 1

Время на прочтение 12 мин
Количество просмотров 26K
NoSQL *
Из песочницы
В серии из нескольких статей я приведу свой адаптированный перевод раздела Redis Best Practices с официального сайта «Redis Labs».
Читать дальше →
Всего голосов 18: ↑18 и ↓0 +18
Комментарии 6

Redis Best Practices, часть 2

Время на прочтение 11 мин
Количество просмотров 18K
NoSQL *
Перевод
Вторая часть цикла переводов Redis Best Practices от «Redis Labs», и в ней рассмотрены паттерны взаимодействия и паттерны хранения данных.
Читать дальше →
Всего голосов 26: ↑26 и ↓0 +26
Комментарии 6

Redis Best Practices, часть 3

Время на прочтение 14 мин
Количество просмотров 12K
NoSQL *
Перевод
Заключительный перевод разделов Redis Best Practices с официального сайта «Redis Labs». Самое необычное и интересное сегодня под катом!

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

Среда разработки PHP на базе Docker

Время на прочтение 12 мин
Количество просмотров 47K
Разработка веб-сайтов *PHP *MySQL *PostgreSQL *DevOps *

Решение на базе Docker, которое позволит создать на локальном компьютере универсальную среду разработки на PHP за 30 - 40 минут. Несколько версий PHP — 7.3 и 7.1 с набором наиболее востребованных расширений. Готовый к работе монитор процессов Supervisor. Предварительно сконфигурированный веб-сервер Nginx. Базы данных: MySQL 5.7MySQL 8PostgreSQLMongoDB 4.2Redis. Настройка основных параметров окружения через файл .env. Возможность модификации сервисов через docker-compose.yml.

Читать далее
Всего голосов 23: ↑21 и ↓2 +19
Комментарии 38

Неизменяемые объекты в PHP

Время на прочтение 7 мин
Количество просмотров 30K
Блог компании VK Разработка веб-сайтов *PHP *
Перевод
В этой короткой статье мы рассмотрим, что собой представляют неизменяемые объекты и почему нам следует их использовать. Неизменяемыми называются объекты, чьё состояние остаётся постоянным с момента их создания. Обычно такие объекты очень просты. Наверняка вы уже знакомы с типами enum или примитивами наподобие DateTimeImmutable. Ниже мы увидим, что если делать простые объекты неизменяемыми, то это поможет избежать определённых ошибок и сэкономить немало времени.
Читать дальше →
Всего голосов 28: ↑25 и ↓3 +22
Комментарии 49

Информация

В рейтинге
Не участвует
Откуда
Брест, Брестская обл., Беларусь
Дата рождения
Зарегистрирован
Активность