dvelum/dr
Composer 安装命令:
composer require dvelum/dr
包简介
Data Record
关键字:
README 文档
README
Data Record - Инструмент для создания и валидации структур данных
Позволяет создавать и валидировать структуры данных, без привязки к БД / ActiveRecord / ORM.
Можно использовать как замену DTO.
Можно использовать как замену валидатора Active Record или ORM в проектах, где нет желания использовать массивные ORM.
Конечную структуру можно экспортировать в массив, далее сохранить в БД.
Кроме стандартных типов данных и валидаторов, позволяет регистрировать свои.
Преимущества
- не нужно создавать обилие классов под каждый тип, заполнять их полями, геттерами и сеттерами
- экономит время на разработку, количество кода в рантайме
- стандартные проверки полей типа minVal, maxVal, maxLength, defaultValue, isNullable делаются одной настройкой в файле конфигурации
- есть возможность проверить всели ли required поля заполнены
- есть слежение за состоянием изменения (получить список полей которые изменились)
- можно создавать собственные (custom) типы данных (достаточно просто)
- использует ленивую загрузку, экономит оперативную память
- значительно меньшее потребление памяти относительно DTO
- автоматическая конвертация типов, например DateTime
$record->set('dateTimeField', '2021-01-01 00:00:00'); /** * @var \DateTime $result */ $result = $record->get('dateTimeField');
Установка
composer require dvelum/dr
Упрощенный пример использования
Файл настроек реестра Records registry.php
<?php use Dvelum\DR\Type\StringType; use Dvelum\DR\Type\DateTimeType; use Dvelum\DR\Record\DefaultValue\CurrentDateTimeString; $registry = [ 'records'=> [ 'ClientData' => [ 'fields' => [ 'firstName' => [ 'type' => 'string', // можно StringType::class 'minLength' => 2, 'required' => true, ], 'age' => [ 'type' => 'int', 'minValue' => 18, 'default' => 18, ], 'date' => [ 'type' => DateTimeType::class, 'minValue' => '2021-01-01', 'defaultValueAdapter' => CurrentDateTimeString::class ] ] ] ] ];
Использование:
<?php use Dvelum\DR\Factory; // получаем данные POST из запроса $params = $psr7Request->getParsedBody(); // получаем настройки реестра $registry = include 'registry.php'; // создаем фабрику DR $factory = new Factory($registry); //=== Пример 1 ================================ $record = $factory->create('ClientData'); try{ $record->setData($params); }catch(\InvalidArgumentException $e){ // переданы невалидные данные } // можно проверить все ли обязательные поля переданы if(!$record->validateRequired()->isSuccess()){ // не все обязательные поля заданы } //=== Пример 2 ================================ // получаем id записи из параметров запроса $id = $psr7Request->getQueryParams()['id']; /** * Загружаем данные из нашего хранилища * @var array $clientData */ $clientData = $someStorage->load($id); $record = $factory->create('ClientData'); // помещаем данные из хранилища в структуру $record->setData($clientData); // помечаем изменения как принятые $record->commitChanges(); try{ // сетим данные из запроса $record->setData($params); }catch(\InvalidArgumentException $e){ // переданы невалидные данные } // Для удобства экспорта данных в хранилище, например в БД, есть подготовленный класс экспорта, // который конвертирует поля в нужный вид (например json поле в строку, DateTime в строку формата 'Y-m-d H:i:s') $export = new \Dvelum\DR\Export\Database(); // получить все данные $data = $export->exportRecord($record); // или получить только обновления $data = $export->exportUpdates($record); // Export можно получить и из объекта $factory->getExport('ExportAlias'), тогда его нужно будет зарегистрировать при создании $factory // и получить командой: /** * @var ExportInterface $export */ $export = $factory->getExport('Database');
Отсутствие подсветки полей в 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 без валидаций. Этим методом можно воспользоваться когда данные приходят из бд и мы им доверяем (уверенны, что они провалидированы перед записью). В этом случае разница в скорости выполнения минимальна.
Валидации "из коробки" больше, кода писать нужно значительно меньше, вполне конкурентное решение имеющее право на жизнь.
dvelum/dr 适用场景与选型建议
dvelum/dr 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 105 次下载、GitHub Stars 达 0, 最近一次更新时间为 2021 年 02 月 23 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 dvelum/dr 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 dvelum/dr 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 dvelum/dr 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Alfabank REST API integration
Zero-dependency raw PHP DNS resolver, domain-ownership verification, and intoDNS/MxToolbox-style diagnostics. Queries authoritative nameservers directly over sockets — never trusts the recursive cache for ownership checks.
A lightweight plain-PHP framework for database-backed CRUD APIs.
bughq error tracking - PHP SDK
ABsurge PHP SDK for feature flags and A/B testing
Production-ready PHP 8.1+ package (CloudCastle Env).
统计信息
- 总下载量: 105
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 2
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2021-02-23

