Download the PHP package kuaukutsu/ds-dto without Composer
On this page you can find all versions of the php package kuaukutsu/ds-dto. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download kuaukutsu/ds-dto
More information about kuaukutsu/ds-dto
Files in kuaukutsu/ds-dto
Package ds-dto
Short Description Data Structure: DTO (Data Transfer Object)
License BSD-3-Clause
Informations about the package ds-dto
DTO (Data Transfer Object)
Disclaimer: вставлю свои 5 копеек, не претендую на истинность, но мысли озвучу (в самых общих чертах).
Словарь используемых терминов:
- Form получение данных извне (request: POST/GET/ARGS/Array), обработка (валидация, фильтрация), передача в сервисный слой (бизнес логика).
- Model какое-то объектное представления данных в системе (инфрастркутура, repository).
- Service различные сервисы (UoW, UseCase), обработка бизнес логики.
- DTO транспорт, плюс схема данных (комментарии могут рассказывать о том, как и где используются данные). Есть возможность быстро организовать версионность массива данных.
Схема для описания примера
В самом простом исполнении получается следующая схема:
Пример DTO
Подходы могут быть разные, но лично мне не нравится передавать данные через конструктор, возможно с приходом php8 и named arguments я поменяю точку зрения.
В DTO можно использовать protected
свойства (плюс геттеры), чтобы не было желания заполнять их как-то кроме как
через hydrate()
. Главное - иммутабельность и никакой логики, как только здесь появляется логика, это сразу
превращается в Entity, или быть может какой-то иной подвид Value Object.
Может возникнуть вопрос, зачем здесь DTO, ведь в сервисный слой можно передавать форму напрямую ($form или в виде массива $form->toArray()), и так же получать из сервисного слоя напрямую модель. Суть в том, что Модель, как и Форма, это реализация некоторой логики, и в приложении могут быть несколько компонент, которые реализуют логику субъективно, по своему, с учётом требований БЛ, но сервисный слой для всех компонент один и тот же. Поэтому нужен механизм, который позволит 3-м разным формам работать с одним методом, как например $service->save(DTO). А так же потому что форма, как любой иной объект может менять своё состояние, и нет чётких гарантий неизменности данных.
Docker
Container:
ghcr.io/kuaukutsu/php:${PHP_VERSION}-cli
(default)jakzal/phpqa:php${PHP_VERSION}
shell
Testing
Unit testing
The package is tested with PHPUnit. To run tests:
Static analysis
The code is statically analyzed with Psalm. To run static analysis:
Code Sniffer
Rector
All versions of ds-dto with dependencies
yiisoft/arrays Version ^3.0
yiisoft/strings Version ^2.3
kuaukutsu/ds-collection Version ^2.0.2