The Ant
что одно ValueObject, что другое
Для Инта делают во? 😳
Kirill
Для Инта делают во? 😳
не для инта, а для ID
Павел
Для Инта делают во? 😳
Ну тип лучше делать отдельные ВОшки под каждый id , тип типизация
The Ant
не для инта, а для ID
Тип у Ида инт, зачем ему во, если можно цифрой?
Павел
Прям userId, articleId
Павел
Это не названия переменных, это классы
Kirill
Тип у Ида инт, зачем ему во, если можно цифрой?
потому что цифровой id одного объекта не должен быть равен другому объекту
Kirill
т.к. это разные идентификаторы
Kirill
для этого и делаются ID как VO, чтоб не путать
Aleksandr
Ну если конечно проект не в проде и можно экспериментировать без проблем - можно и поибаца
ну вообще странно, если у тебя в рамках одного проекта есть ид а есть юид
Павел
С другой стороны профит крайне мал, потому что если так делать, то похорошему надо делать еще в разных контекстах, или в shared context что немного странно
Kirill
для этого и делаются ID как VO, чтоб не путать
а то придёт будет в коде public function touchArticlesById(int $id, DateTimeInterface $date): void и гадай что это за id такой. Автора статей или самой статьи? Или вообще категории?
The Ant
потому что цифровой id одного объекта не должен быть равен другому объекту
это усложнение какое-то, с непонятным профитом. Ид и так уникальный, не важно выражен ли он в цифре, или в объекте
Павел
это усложнение какое-то, с непонятным профитом. Ид и так уникальный, не важно выражен ли он в цифре, или в объекте
Типизация, например у тебя метод принимает два id, можно в теории перепутать местами)))
Kirill
а реализован через сквозную таблицу, например
Kirill
и шарится между всеми таблицами
Kirill
и в чём оно проявляется
The Ant
а где ты видишь переусложнение?
для такого ида надо будет писать обработчик для доктрины
The Ant
как минимум
Vlad
ничего не понял
Смотри. чтобы получить такую последовательность, мне надо сделать сервис прослойку и заинжектить туда фабрику и воркеры. А хотелось чтобы была такая же последовательность но без сервиса
Павел
а где ты видишь переусложнение?
1) доп классы 2) Если брать доктрину, то доп маппинг и доп типы если не типы под каждый новый id, если без мейджика
The Ant
ээээ, его писать - пара минут
тем не менее это лишний код, который надо сопровождать, ради хрен пойми чего
Kirill
ээээ, его писать - пара минут
Вот тебе в качестве примера https://github.com/railt/railt.org/blob/master/app/Infrastructure/Persistence/Doctrine/Type/UniversalUniqueIdType.php
Aleksandr
Павел
Я видел делали мейджик, чтобы так не страдать, но это мейджик
Павел
очень зря
Аргумент?
The Ant
вот например у меня агрегат на десяток сущностей разных, и к каждому надо свой тип прописывать
Kirill
И километр говна
Ну блин, это тоже 1 строчка для айдишника
Aleksandr
Аргумент?
смесь логики
Павел
смесь логики
Смесь какой логики?
Kirill
причём такая, которая не меняется веками)
Павел
причём такая, которая не меняется веками)
Ну все равно это потом в 200 строк говна вылетает
Павел
Можно бустрапом конечно все это заполнять
Павел
Это хоть куда нишло
Kirill
но можно в компилер пас запихнуть и автоматизировать
Павел
если у тебя будет 200 энтитей
Вот опять же, если мы говорим про контексты, то id шник в каком контексте будет лежать?
Aleksandr
Смесь какой логики?
ну даже смесь логики поиска по первичному ключу
Павел
По хорошему у своего контекста должен быть свой id
Павел
в shared?
Kirill
может быть шаред, может быть локальный какой
Aleksandr
если у тебя будет 200 энтитей
если у тебя 200 энтететей, что у тебя прблемы)
Павел
ну даже смесь логики поиска по первичному ключу
Как мы ее мешаем? У каждого своя? Почему один модуль должен повторять другой?
Kirill
если у тебя 200 энтететей, что у тебя прблемы)
боюсь тогда будут другие проблемы)))
Kirill
не с айдишниками
The Ant
ну даже смесь логики поиска по первичному ключу
это как? в репо есть дефолтный метод find, чем он вас не устраивает?
Павел
Обычный большой монолит, в чем проблема. 200 думаю не прям мега большое число для активного проекта
Павел
модуль?
Модуль/контекст
Aleksandr
Работает
тогда my bad XD
The Ant
и еще момент, мне часто надо с реквеста принять список идов, со строками и интами проблем нет. А че делать если иды это ВО? придется и для реквеста хендлер писать
The Ant
отфильтровать в коллекциях доктрины, тож какой-то ппц будет
Павел
Я просто не понял вопроса, если надо десериализоват -пишешь свой денормалайзер на свой тип
Павел
У меня так есть денормалайзер на Рамси Uuid
The Ant
вот и еще вопрос, почему все юзают рамси, а не симфони компонент?
The Ant
типа фреймворк агностик? )
Павел
вот и еще вопрос, почему все юзают рамси, а не симфони компонент?
Хз) Староверы) А вообще это плохо, но лично я не справился с uuid1 и я использовал рамси uuid4, так как был уже в прошлом проекте )) Но после доклада Удальцова, понял что надо было справляться)
The Ant
почему не справился?
The Ant
коллизий много было?
Павел
Заколебало в чтении байты конвертить в человеческий вид, и взял простой uuid4 и varchar32)))
Павел
Но это прям беда-бошка)
The Ant
была такая бида, потом я понял фишку конвертации в дто и дальнейшей сериализации 🤣🤣🤣
The Ant
оно хоть и заморочено, но дает возможность управлять отображением через конфиги в дто касается времени и ууидов всяких
Павел
была такая бида, потом я понял фишку конвертации в дто и дальнейшей сериализации 🤣🤣🤣
ну там еще вроде и where надо конвертить, короче чето я поковырялся недолго и забил, пошел уже протоптанным путем
Павел
Надо еще раз поковырять видимо
Павел
не, не надо. $uuid->toBunary() и всё, через плейсхолдеры
А ну т.е. из стринга человекопонятного создать VO, потом его в бинари?