Ответы Mail.ru: DTO в контексте использования в php

Андрей (431295) 9 месяцев назад

DTO - это, по факту, только данные. Структура в терминах C (без плюсов) или запись в терминах Pascal. Объект содержащий поля, но без какой-либо логики (кроме создания объекта и его сериализации). Более того, это константный объект - который ты можешь только создать и не можешь в нём ничего менять.

Если в объекте есть какая-то логика (геттеры / сеттеры, валидаторы и т.д.) - это уже не DTO, а Value Object (VO).

first-programmerЗнаток

9 месяцев назад

Ну это видишь, все с отсылкой к C, Java откуда это перебралось, но в php до 7.4 это вообще не было реальностью. И я не заметил каки-то минусов такой реализации. Понятно что можно делать все по книжке, но мне кажется это все просто рекомендации, а не истина в первой инстанции. Если рекомендация из книжки несет больше усложнений, то в чем ее смысл? Я пока не увидел плюса от такой реализации. До 7.4 у меня был dto который сам выполнял маппинг и делал это хорошо, создавал вложенные структуры, вложенные списки объектов, а теперь все хотят плодить кучи мапперов и разводить грязь в коде с этими простынями из циклов с сеттерами.

first-programmerЗнаток

9 месяцев назад

Вот смотришь на это и неприятно. Вместо того чтобы сделать new UserDto($data). Ты делаешь new UserDtoMapper($data), а внутриутробной тебя там циклы с перебором, маппингом, созданием других вложенных dto через другие мапперы.

first-programmerЗнаток

9 месяцев назад

Пока что похоже просто на - так написано, так надо. Но на практике, я не увидел ни одного плюса перед тем чтобы делать маппинг внутри дто. Сериализация и маппинг вообще не считается бизнеслогикой, а в dto не должно быть именно бизнес логики.