Павел
Михаил
Ладно ребят, этому ларавельщику не раскачать наши устои
Павел
Правила валидации внутри DTO
Это аспектное программирование, а не логика внутри дто по созданию других объектов
Михаил
ну ок, ты просто мапишь реквест на контекс вне контроллера, но всё же не абсурдная одна строчка
Nikolay
Открываете статьи что такое дто и смотрите
Если я напишу такую статью и скажу, что можно будет считаться ? Окей, даю отсылку на https://www.ozon.ru/product/robert-martin-rekomenduet-kod-kotoryy-umeshchaetsya-v-golove-evristiki-dlya-razrabotchikov-981458526/ Симан Марк пишет как раз про Parse внутри DTO
Nikolay
нет из данных в dto, анпример UserDTO, создать объект User через метод Parse
Nikolay
Причем валидный
Михаил
FromRequest это ваша реализация Argument Resolver? Или что-то встроенное?
Nikolay
все верно
Nikolay
выполняется "анализ"
Павел
все верно
Ок, если это тру вей для вас, не вижу смысла в дальнейшей беседе
Nikolay
Стоп, это к слову о статьях
Nikolay
Причем здесь мое личное отношение?
Павел
Причем здесь мое личное отношение?
Мы вели речь о том, что в вашем понимании может или нет дто
Nikolay
Привел пример из книги достаточно известного в мире java программиста с большим опытом работы
Рома
может содержать метод toArray
Павел
Привел пример из книги достаточно известного в мире java программиста с большим опытом работы
Честно не верю))) минимум для сущности нужна фабрика, так как сущность может иметь сложную логику создания или другие сущности, которые дто не достанет))
Nikolay
Так же этот вопрос про DTO буквально недавно задавал в большой группе телеграмма, где парни с большим опытом. Не знаю можно или нет давать ссылку, скорее всего вы о ней знаете
Nikolay
https://t.me/oop_ru
Рома
а в конструктор заносятся все свойства
Nikolay
Привет всем! Уверен такой вопрос уже поднимался ни одну тысячу раз. Допускается ли в DTO: - Валидация внутри - Установка дефолтных значений - Методы возвращающие готовые объекты из данных, как пример RequestUserDTO->Parse() // User
Nikolay
Привет всем! Уверен такой вопрос уже поднимался ни одну тысячу раз. Допускается ли в DTO: - Валидация внутри - Установка дефолтных значений - Методы возвращающие готовые объекты из данных, как пример RequestUserDTO->Parse() // User
а почему нет? ну то есть важен контекст почему и на что влияет это все. Но в общем и целом единственное ограничение - "dto тупая структурка которую можно сериализовать и передавать между слоями". Что может быть как часть этой структурки это уже не важно, и надо смотреть просто по зависимостям кто с каком стороны дергает и кому можно это дергать
Михаил
Привел пример из книги достаточно известного в мире java программиста с большим опытом работы
Роберт Мартин? Тот что игру престолов создал? Вот что он понимает в программировании?
Павел
` Методы возвращающие готовые объекты из данных, как пример RequestUserDTO->Parse() // User` Врядли Протько вчитался в вот это, потому что его ответ не содеожит на это ответ
Nikolay
Про какую? RequestUserDTO->Parse() // User возвращает USer
Павел
Вот его ответ с которым я солидарен Но в общем и целом единственное ограничение - "dto тупая структурка которую можно сериализовать и передавать между слоями"
Nikolay
единственное ограничение да
Nikolay
о чем я кстати и написал
Павел
Тупая структура = без логики
Nikolay
в самом начале и привел пример из мира Java что могут расширять DTO
Михаил
` Методы возвращающие готовые объекты из данных, как пример RequestUserDTO->Parse() // User` Врядли Протько вчитался в вот это, потому что его ответ не содеожит на это ответ
Слушай я думаю в твоём примере это было бы как $editDTO->createEditCommand(); Как итог - твоя команда ничего не знает про валидацию и реквест.
Nikolay
Тупая структура = без логики
Нет. Вы ошибаетесь. Тупая структура != без логики в этом случае. DTO должно соответствовать тупой структуре, например в момент передачи. То есть то что от нее ожидают, то и делать.
Павел
Слушай я думаю в твоём примере это было бы как $editDTO->createEditCommand(); Как итог - твоя команда ничего не знает про валидацию и реквест.
Согласен что имеет смысл, так как у меня апликейшен зависит на на http. Но для себя я принял, что делать 2 дто слишком излишне. Когда же надо разъединить, да, можно разъединить http слой и слой комманд.
Nikolay
То есть если она содержит метод Parse, и при эттом выполняет основное назначение. То это DTO
Михаил
И create метод != логика
Павел
Если оно может содержать всё и вся
Павел
И логику и данные
Nikolay
Абстракцией которую мы в нее вкладываем
Nikolay
Как и все другие классы, которые мы обзываем как хотим
Владимир
UserDTOAndAlsoAMapper :)
Павел
Нет. Вы ошибаетесь. Тупая структура != без логики в этом случае. DTO должно соответствовать тупой структуре, например в момент передачи. То есть то что от нее ожидают, то и делать.
Ок, спор ради спора. Я даже в ответе Сергея увидел про тупую структуру, а так же в статьях различных. Хотите делать - делайте, в коде можно что угодно делать.
Михаил
Согласен что имеет смысл, так как у меня апликейшен зависит на на http. Но для себя я принял, что делать 2 дто слишком излишне. Когда же надо разъединить, да, можно разъединить http слой и слой комманд.
дело не только в слоях Допустим данные приходят как {email: "test@mail.com", age: 21, name: "Вася"} а перобразовать нужно в сущность new Command(email: new Email("test@mail.com"), age: new Age(21), name: "Вася") Думаю врядли твой умный маппер такое сможет
Павел
Делайте дто которая создает юзера (хз правда откуда она возьмет зависимости, наверное вы еще и в консутрктор дто прокидываете репозитории тогда)
Nikolay
Я привел пример книги, где эту структуру расширили. Статьи тоже люди пишут. Нет единного фолианта и у меня не спор ради спора. Пришел человек с идей расширения DTO, я и сказал, что так делать можно
Михаил
Ну или он это и делает но только в конструкторе
Павел
Нет, valueObject норм собираются
Сериализатор нормально десериализует несколько вложенностей объектов
Михаил
Нет, valueObject норм собираются
Ну то есть у тебя всё тоже самое, просто в моём примере это было без лишней магии
Павел
Ну то есть у тебя всё тоже самое, просто в моём примере это было без лишней магии
Ну если автомаппер назвать магией, то да. Опять же ваш editDto собирается такой же магией, и в чем разница?
Рома
public function search(?string $status, ?string $created_at, ?string $updated_at) { $query = $this->createQueryBuilder('stmt'); if ($status) { $query = $query->where('status', $status); } if ($created_at) { $query = $query->where('created_at', 'like', $created_at.'%'); } if ($updated_at) { $query = $query->where('updated_at', 'like', $updated_at.'%'); } return $query->getQuery()->getResult(); } в symfony вручную надо выбирать where или AndWhere?
Павел
Почему говорю про массив, потому что поиск обычно про чтение, там можно чутка и поговнять, но лучше все же дто
Nikolay
Ну если автомаппер назвать магией, то да. Опять же ваш editDto собирается такой же магией, и в чем разница?
там не просто маппер же, ты когда команду делаешь у тебя и валидация может происходить
Nikolay
в этом и прикол делать сущность из DTO
Павел
в этом и прикол делать сущность из DTO
Как дто сделает сущность, если сущности нужна другая сущность?
Павел
У вас инжект репозитория внутри дто?
Рома
просто везде andWhere указывай и не парься
"detail": "[Syntax Error] line 0, col 51: Error: Expected =, <, <=, <>, >, >=, !=, got 'AND'", "class": "Doctrine\\ORM\\Query\\QueryException",
Рома
о здесь тоже есть QueryException
Nikolay
я не помню как в книге, давненько ее читал, но там весь основной прикол Parse был в поддержке IDE и проерках. Что у тебя различного рода валидации проходят не в коде создания User, а внутри DTO и когда ты из DTO будешь получать User он уже будет валиден
Рома
{{domain}}/api/stmts/?status=Resolved&created_at=2024&updated_at=2024
Nikolay
Как дто сделает сущность, если сущности нужна другая сущность?
а, ну тут никак. Если это не Объект Значение
Рома
неправильно?