170 похожих чатов

Пхпгуру, скажите, пожалуйста, - это DTO? https://github.com/DigitalOceanPHP/Client/blob/4.3/src/Entity/AbstractEntity.php#L48

17 ответов

1 просмотр

нет

W.-Blazkowicz Автор вопроса
The Ant 🐜
нет

Этот шаблон упаковки неструктурированных данных в типы, чтобы мы могли использовать наши данные надежным способом, называется “объекты передачи данных” или DTO (Data Transfer Object). Вроде под определение подходит. Почему нет? Нет валидации?

W.-Blazkowicz Автор вопроса
The Ant 🐜
нет

Прочитав пару раз эту статью, я могу сделать вывод, что это все-таки DTO, но в примере DigitalOceanPHP/Client нет никаких гарантий, что данные относятся к тому типу, о котором они говорят, так как используется только docblocks. Не могу спорить, так как не хватает опыта. Но если бы была еще одна точка зрения, то было бы отлично :) https://maxyc.ru/programming/dto-intro/

The Ant 🐜
нет

Тоже думаю, что нет. DTO обычно не содержит никакой логики. Это просто класс, чтобы переместить данные, учитывая их типы. Иногда туда добавляют правила валидации (через аннотации или атрибуты). Если там какая-то логика по преобразованию, то это уже не просто dto, а что-то посерьёзнее

W.-Blazkowicz Автор вопроса
Dmitrii
Тоже думаю, что нет. DTO обычно не содержит никако...

То есть, если бы в \DigitalOceanV2\Entity\AbstractEntity были только \DigitalOceanV2\Entity\AbstractEntity::__construct и \DigitalOceanV2\Entity\AbstractEntity::build, то это был бы DTO? \DigitalOceanV2\Entity\AbstractEntity::build - это по сути этот код отсюда, только более универсальный: public function fromRequest(CustomerRequest $request): CustomerData { return new CustomerData([ 'name' => $request->get('name'), 'email' => $request->get('email'), 'birth_date' => Carbon::make( $request->get('birth_date') ), ]); }

W. Blazkowicz
То есть, если бы в \DigitalOceanV2\Entity\Abstract...

У DO абстрактный класс, который сам по себе пользы не несет (и инстанцировать его не получится). От него подразумевается, что нужно отнаследоваться, чтобы получить необходимую функциональность: конструирование с любым количеством параметров, переданным в массиве. Но про типы там ничего не сказано. Да и сложно в таком формате еще и верные типы расставвить. А в примере с Ларавел - там чисто ДТО со статическим конструктором. Оно как раз нужно, чтобы из одного слоя программы (например, контроллера) передать данные в другой слой (например, сервис). И больше ничего. Поэтому я думаю, что даже если остальные методы в классе DO убрать - это все равно не будет ДТО, в первую очередь потому что класс абстрактный

это не DTO, это абстрактный класс с помощью которого можно сделать DTO вот например пакет для ДТОшек https://github.com/spatie/data-transfer-object посмотри блок Usage

W.-Blazkowicz Автор вопроса
Дмитрий Щербаков
это не DTO, это абстрактный класс с помощью которо...

То есть наследники \DigitalOceanV2\Entity\AbstractEntity и есть DTO? Например, этот: https://github.com/DigitalOceanPHP/Client/blob/292f1a6bb8d4f4e168661b7e3ba63a92e3a414e4/src/Entity/Tag.php

Дмитрий Щербаков
это не DTO, это абстрактный класс с помощью которо...

В этом пакете есть типы. А у ДО типов нет. С таким же успехом можно массивы использовать

Дмитрий Щербаков
штаа

if (\property_exists($this, $property)) { $this->$property = $value; }

Dmitrii
if (\property_exists($this, $property)) { ...

сделай в своей DTO typed properties и автоматически появится проверка типов средствами PHP 7.4

W.-Blazkowicz Автор вопроса
Дмитрий Щербаков
ага

Спасибо! Теперь ясно. Нужно было изначально мне вопрос поставить по другому: "является ли AbstractEntity фабрикой DTO" :) Есть еще один вопрос. Правильней будет сделать геттеры для свойств DTO, а свойства - private? DigitalOceanPHP/Client в клиентском коде получает эти свойства напрямую, а не геттерами (почему?). Ну, инкапсуляция там. Все дела

Dmitrii
if (\property_exists($this, $property)) { ...

ну хз я считаю что DTO в простейшем виде это вот эти 3 строки в конструкторе и всё, а дальше это уже наворачивание магии

W. Blazkowicz
Спасибо! Теперь ясно. Нужно было изначально мне во...

правильнее взять нормальный пакет для DTO, ссылку выше я дал, а это поделие от DO оставить самим DO

W. Blazkowicz
Спасибо! Теперь ясно. Нужно было изначально мне во...

Даже название класса тебе намекает, что это не дто

Похожие вопросы

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
How to create an OS in C? what to study?
Linus
18
а как бы вылезти из ИО, что то типа IO -> Ether или в какую сторону смотреть ? что то туплю
Fedor
9
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
Карта сайта