Kirill
да, про него
ну тут всё же надо подумать чья это зона ответсвенности
Kirill
если это прям тип, который может быть в т.ч. выражен через VO, то ты прав
Kirill
типа new Description('text') со всякими: $description::$maxLength и проч
Михаил
типа new Description('text') со всякими: $description::$maxLength и проч
Удобно, можно maxLenh прям в рантайме поменять
Kirill
ну зависит от реализации
The Ant
Ахахахахахаахахах
Дичь редкостная конешь.
Павел
Дичь редкостная конешь.
Эта дичь вообще то твой любимый вопрос закрывает, как сделать партикал Дто )) Конечно можно было и раньше, но теперь будет поинтереснее
Михаил
Партикал дто? Через наследования чтоль?
Павел
Партикал дто? Через наследования чтоль?
Имеется ввиду частичное заполнение дто, и понять, было ли засечено свойство или нет. Сложновато при nullable свойствах
Михаил
Имеется ввиду частичное заполнение дто, и понять, было ли засечено свойство или нет. Сложновато при nullable свойствах
Ааа, когда сложно понять null - это значение или поле не пришло Так оно ничего не решает, для этого нужно не dto а changeset-ы
Михаил
Ну и лучше отказаться от null и использовать его именно как непришедшее значение
Павел
class Dto { public string $name { set { $this->inited['name'] = true; $this->name = $value; } } public function isInit(string $name){ return isset($this->inited[name]) } } Можно было и с сеттерами такое, но с паблик свойствами дто поприятнее
Павел
Ну и лучше отказаться от null и использовать его именно как непришедшее значение
Не всегда есть возможность, или не всегда можно заменить. Но да, такой кейс покрывает бОльшинство случаев
Павел
А почему обязательно сетить в поле а не сразу в массив?
Массив это не структурированная штука. Прилетает http запрос, это массив Делаем deserialize на дто, Дто пихаем в сервис/хэндлер и там мы уже хотим понять, а какие свойства были засечены
Михаил
У дто делаешь метод ::createFromRequest И делаешь getter-ы с вопрошателями которые или забирают данные из массива запроса или спрашивают, есть ли данные.
Михаил
Массив это не структурированная штука. Прилетает http запрос, это массив Делаем deserialize на дто, Дто пихаем в сервис/хэндлер и там мы уже хотим понять, а какие свойства были засечены
Нам не обязательно мапить данные на внутреннее состояние dto. Нам важен сам интерфейс этой dto. Ведь этот интерфейс уже является структурой.
Михаил
Массив это не структурированная штука. Прилетает http запрос, это массив Делаем deserialize на дто, Дто пихаем в сервис/хэндлер и там мы уже хотим понять, а какие свойства были засечены
Плюс перед тем как мапить данные - их надо провалидировать, а раз они уже валидны, то их можно спокойно тянуть. Ещё видел подход когда нет маппинга данных на дто. В самой дто просто заводятся методы для трансформации и маппинга в другие объекты.
Павел
Плюс зачем мне геттеры, если можно дто с паблик свойствами
Павел
Опять же если не промапить на свойства - возня с валидатором и что надо будет валидацию писать на массив
Михаил
Ну и тем более после 8.4 и эта мечта станет реальностью )
Павел
Что бы их не меняли в рантайме
Тут опять таки не однозначно, кто то за имутабельность кто то нет, да и есть ридонли
Павел
Ну и тем более после 8.4 и эта мечта станет реальностью )
Ну я сейчас вообще покрываю этот кейс рефлексией, но и это не совсем ок
Михаил
Ридонли на то и ридонли - только в конструкторе можно будет редактировать
Павел
Проще трейтом )
Это рефлексия =)
Павел
У меня такой же сервис есть и без трейта выходит
The Ant
Ну да, зато боилерплейта сраного нет
Павел
The Ant
У меня такой же сервис есть и без трейта выходит
А как без рефлексии понять инициализироаали пропс или нет?
Павел
А как без рефлексии понять инициализироаали пропс или нет?
Сервис, используюзий рефлексию, но без трейта.
Михаил
А как без рефлексии понять инициализироаали пропс или нет?
Если критическая ошибка не происходит при обращении
The Ant
Сервис, используюзий рефлексию, но без трейта.
А, я трейт прям в дто. Чтобы сервис не делать и не инжектить его везде
Павел
А, я трейт прям в дто. Чтобы сервис не делать и не инжектить его везде
Да в целом одно и тоже, я просто решил через сервис
The Ant
Угу. Можно было бы наверное функцию, было бы лучше даже. Но с функциями беда в пхп
The Ant
А хелперы на Статик классах такое себе
Павел
Ну и с сервисом я думаю получше вот это: Ты динамиечки свойства перебираешь, а я принудительно указываю нейм. Если в дто поменять название, то я упаду в тесте, ты нет
Павел
Т.е. если делать трейт, то наверное лучше не массив возвращать а именно нейм проверять
Павел
Т.е. тут скорее не трейт vs сервис, а в целом подход
The Ant
Тут все зависит от использования в дальнейшем скорее. У меня полуавтоматический мапинг на ентитю, поэтому так )
The Ant
Если полностью ручной на ифах, то без массива наверное
The Ant
Если полностью автоматический, то и рефлексия не нужна такая, это задача мапера будет )
The Ant
Стыдно такое конешь показывать, но да ладно )
Павел
Не проще тогда денормалайзером в 1 строку?
The Ant
Дрочить сериалайзер туда суда неахота )
Павел
The Ant
Не проще тогда денормалайзером в 1 строку?
Ну , так раньше делал, а потом тащить его везде устал
Павел
The Ant
Хотяб лишних зависимостей нет в конструкторе сервиса 🤣
The Ant
Этим и руководствовался
Павел
Хотяб лишних зависимостей нет в конструкторе сервиса 🤣
https://github.com/symfony/symfony/blob/7.1/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php Ну или подобный свой написать маппер
Павел
А то голым кодом что то совсем буе. $arrayMapper->map($dto->getProps(), $entity)
Павел
Хз что зависимостей бояться. Если боишься, делай через new ))
The Ant
Хз что зависимостей бояться. Если боишься, делай через new ))
Ахах, прост есть сущности ппц большие. Некоторые ещё штук 5 репозиториев тянут за собой. Я не знаю как с этой хернёй бороться. Там в конструкторе портянка на экран целый. Всякой шляпы. Логкры, ентитименеджеры, ивент басы, командбасы и прочее прочее. Ещё и хелперов всяких напихивать.
The Ant
Хотя можно было бы просто функции юзать для многих действий 😟 как вот мапер какой
Михаил
Стыдно такое конешь показывать, но да ладно )
Можно через кодогенерацию сделать без рефлексии и тоже в одну строчку вызывать
Павел
@theantt ты все никак не осилишь телегу на компе?)
The Ant
Сложный вопрос для меня) шапочка из фольги. Вроде надо, а вроде и бекдор сук ))
The Ant
Не хочу ставить крч 😄
The Ant
Точно, есть же веб версия
Михаил
Всмысле бекдор?
Михаил
Поподробнее
Михаил
The Ant
Всмысле бекдор?
Ну я не знаю возможностей телеги на десктопе. М б. Она скриншоты экрана шлёт Пашке, может видео пишет. Может слушает микро, или может дать возможность приконнектится и ченить поделать 🤷 Поэтому, нахер ее ) но это мои личные заморочки. Все сложно.
Михаил
Ясно, аваторка всё объясняет
Михаил
Хотя мне ли говорить, тоже иногда паранойю
Михаил
Ну будет свободные выходные - извучи исходники телеги а потом собери
The Ant
Ну я не то чтобы прям параноик. Но приватность нынче вообще не в почете. Хочется немного... Анальных зондов везде насовали
Михаил
Ну так измени своё отношение к этому. Признайся себе в бессилии. Скажи что «да, за мной следят. Да, у меня уже установлены все возможные бекдоры и слежки на пк» и твоя задача сделать так, что бы ничего ценного на нём не было. Разделяй и влавствуй
The Ant
Лучше минимизировать ) А то вдруг в приватном чате будешь обсуждать политику гневно, а тщ.майор по скринам вычислит тебя 😄
The Ant
Прецеденты кстати были, на судах были секурные чаты из телеги. Откуда они у них вопрос конешь.
Михаил
Ну я думаю про обсуждении политики и вообще нарушения закона страны в которой ты живёшь - это вопрос отдельный. Так не стоит делать не важно, разговоры об это ведутся в чате на компе или на кухне. У нас больше вопрос про хаккерские атаки