Download the PHP package dvelum/dr without Composer
On this page you can find all versions of the php package dvelum/dr. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Package dr
Short Description Data Record
License MIT
Homepage https://github.com/dvelum/dr
Informations about the package dr
Data Record - Инструмент для создания и валидации структур данных
Позволяет создавать и валидировать структуры данных, без привязки к БД / ActiveRecord / ORM.
Можно использовать как замену DTO.
Можно использовать как замену валидатора Active Record или ORM в проектах, где нет желания использовать массивные ORM.
Конечную структуру можно экспортировать в массив, далее сохранить в БД.
Кроме стандартных типов данных и валидаторов, позволяет регистрировать свои.
Документация
Преимущества
- не нужно создавать обилие классов под каждый тип, заполнять их полями, геттерами и сеттерами
- экономит время на разработку, количество кода в рантайме
- стандартные проверки полей типа minVal, maxVal, maxLength, defaultValue, isNullable делаются одной настройкой в файле конфигурации
- есть возможность проверить всели ли required поля заполнены
- есть слежение за состоянием изменения (получить список полей которые изменились)
- можно создавать собственные (custom) типы данных (достаточно просто)
- использует ленивую загрузку, экономит оперативную память
- значительно меньшее потребление памяти относительно DTO
- автоматическая конвертация типов, например DateTime
Установка
composer require dvelum/dr
Упрощенный пример использования
Файл настроек реестра Records registry.php
Подробный пример настроек
Использование:
Отсутствие подсветки полей в IDE можно компенсировать UI пакетом dvelum\dr-ui
Экспериментальный пакет, позволяет просматривать ваши структуры данных.
Пока доступен только просмотр, возможно будет добавлено и редактирование.
Запускается одной командой на локальном хосте linux/macos
Производительность
Сравнение DataRecord с DTO, тест на заполнение 50,000 объектов.
PHP 7.4, xdebug отключен, cli opcache включен.
php test/tests/performance/create.php
- создать рандомный датасет
php test/tests/performance/dto.php
- заполнение DTO
php test/tests/performance/record.php
- заполнение Record
php test/tests/performance/record.php -r 1
- заполнение Record при помощи setRawData
Время, c | RAM, mb | |
---|---|---|
DTO | 0.025 | 13.177 |
DR | 0.146 | 2.016 |
DR raw | 0.036 | 2.016 |
Data Record потребляет значительно меньше (6.5 раз) оперативной памяти за счет оптимизаций, но по времени выполнения естественно уступает нативным иструментам (5.5 раз), так как валидаций больше и выполняются они в коде.
Для повышения производительности заполнения Data Record есть метод setRawData, который заполняет Record без валидаций. Этим методом можно воспользоваться когда данные приходят из бд и мы им доверяем (уверенны, что они провалидированы перед записью). В этом случае разница в скорости выполнения минимальна.
Валидации "из коробки" больше, кода писать нужно значительно меньше, вполне конкурентное решение имеющее право на жизнь.