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

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

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

Программирование *Проектирование и рефакторинг *


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

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

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

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

Введение


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

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

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

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

Блог компании Тензор PostgreSQL *SQL *Администрирование баз данных *ERP-системы *

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

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

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

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

Блог компании RUVDS.com Системное администрирование *Git *GitHub
Перевод

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

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

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

PHP *Symfony *Doctrine ORM *
Из песочницы

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

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

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

Читать далее
Всего голосов 10: ↑10 и ↓0 +10
Просмотры 2.8K
Комментарии 9

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

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




TL;DR


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

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

Cohesion и Coupling: отличия

Программирование *Анализ и проектирование систем *Совершенный код *Проектирование и рефакторинг *ООП *
Перевод

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

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

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

Dependency Injection в мире Software Engineering

Блог компании Авито PHP *Программирование *Совершенный код *ООП *
✏️ Технотекст 2021

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

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

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

Программирование *Совершенный код *.NET *C# *
Command-query separation (CQS) — это разделение методов на read и write.

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

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

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

Блог компании Skillbox Программирование *Git *Лайфхаки для гиков
Перевод
image

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

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

Redis Best Practices, часть 2

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

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

Разработка веб-сайтов *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
Просмотры 33K
Комментарии 38

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

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

Готовимся к собеседованию по PHP: ключевое слово «static»

PHP *Программирование *ООП *
Tutorial
Не секрет, что на собеседованиях любят задавать каверзные вопросы. Не всегда адекватные, не всегда имеющие отношение к реальности, но факт остается фактом — задают. Конечно, вопрос вопросу рознь, и иногда вопрос, на первый взгляд кажущийся вам дурацким, на самом деле направлен на проверку того, насколько хорошо вы знаете язык, на котором пишете.

image

Попробуем разобрать «по косточкам» один из таких вопросов — что значит слово «static» в PHP и зачем оно применяется?
Подробности, цитаты из мануала, стандартов и личного опыта - под катом
Всего голосов 54: ↑41 и ↓13 +28
Просмотры 162K
Комментарии 70

Готовимся к собеседованию по PHP: Всё об итерации и немного про псевдотип «iterable»

PHP *Программирование *ООП *
Tutorial
Не секрет, что на собеседованиях любят задавать каверзные вопросы. Не всегда адекватные, не всегда имеющие отношение к реальности, но факт остается фактом — задают. Конечно, вопрос вопросу рознь, и иногда вопрос, на первый взгляд кажущийся вам дурацким, на самом деле направлен на проверку того, насколько хорошо вы знаете язык, на котором пишете.

И, разумеется, какими бы вам странными и некорректными ни казались вопросы на собеседовании, приходить нужно всё-таки подготовленным, зная тот язык, за программирование на котором вам собираются платить.

image

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

Две предыдущие части:


Добро пожаловать под кат!
Всего голосов 27: ↑23 и ↓4 +19
Просмотры 60K
Комментарии 21

Готовимся к собеседованию по PHP: псевдотип «callable»

Ненормальное программирование *Разработка веб-сайтов *PHP *Программирование *
Tutorial
Не секрет, что на собеседованиях любят задавать каверзные вопросы. Не всегда адекватные, не всегда имеющие отношение к реальности, но факт остается фактом — задают. Конечно, вопрос вопросу рознь, и иногда вопрос, на первый взгляд кажущийся вам дурацким, на самом деле направлен на проверку того, насколько хорошо вы знаете язык, на котором пишете.
image
Вторая часть серии статей посвящена одному из самых сложных и объемных вопросов о современном PHP — что такое «callable»? Я постарался свести в один текст некий минимум знаний об этом вопросе.
Подробный разбор неочевидных мест мануала - под катом
Всего голосов 37: ↑36 и ↓1 +35
Просмотры 83K
Комментарии 65

Новое расширение PHP позволяет добавлять произвольные методы к скалярам

PHP *
На Github появилось новое экспериментальное расширение PHP “scalar_objects”, с помощью которого можно добавлять любые методы к числам, строкам, массивам.
Выглядит это примерно так:

$result = $string->replace('shit', 'candy')->remove(',')->toUpper()->split(" ")->sort();

Симпатично, не правда ли?
Инструкции по установке можно найти по ссылке выше, требуется PHP 5.4.
Имейте ввиду, что расширение находится в очень ранней альфа-версии, первый коммит датирован 24 января.
Радует, что автор расширения — контрибьютор PHP Никита Попов: есть вероятность, что подобное API когда-нибудь добавят в ядро интерпретатора.
Дальше я просто покажу как можно использовать эти новые возможности в разработке.
Читать дальше →
Всего голосов 70: ↑66 и ↓4 +62
Просмотры 12K
Комментарии 68

Redis на практических примерах

Блог компании ManyChat PHP *Программирование *Анализ и проектирование систем *NoSQL *

Redis — достаточно популярный инструмент, который из коробки поддерживает большое количество различных типов данных и методов работы с ними. Во многих проектах он используется в качестве кэшируещего слоя, но его возможности намного шире. Мы в ManyChat очень любим Redis и активно используем его в нашем продукте для решения огромного количества задач. Про некоторые интересные кейсы использования этой in-memory key-value базы данных я расскажу на примерах. Надеюсь, вам они будут полезны, и вы сможете применить что-то в своих проектах.

Рассмотрим следующие кейсы:

  • Кэширование данных (да, банально и скучно, но это классный инструмент для кэширования и обойти стороной этот кейс, кажется будет не правильно)
  • Работа с очередями на базе redis
  • Организация блокировок (mutex)
  • Делаем систему rate-limit
  • Pubsub — делаем рассылки сообщений на клиенты

Буду работать с сырыми redis командами, чтобы не завязываться на какую-либо конкретную библиотеку, предоставляющую обертку над этими командами. Код буду писать на PHP с использованием ext-redis, но он здесь для наглядности, использовать представленные подходы можно в связке с любым другим языком программирования.


Читать дальше →
Всего голосов 40: ↑38 и ↓2 +36
Просмотры 59K
Комментарии 14

Информация

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