Виктор
Ок, допустим я "обезличил" комментарии. Теперь это просто класс Comment, а getParent возвращает какой-нибудь GalleryEntityInterface. Вывожу последние. Нужны ссылки на родителей. Как мне их формировать? Проверять для каждого коммента класс родителя (Album/Photo/...)?
Павел
Есть модуль комментов. У него 4 контракта для других модулей: create(type, parentId, text) remove(id) update(id, newtext) getList(type, parentId)
The Ant
Мне кажется у нас разное понимание литералов))
Литерал это $foo = 'bar'; вот bar это литерал. Это определение литерала. Буквально строка в коде.
Павел
И другие модули вертят этими контарктами как хотят
The Ant
Ну и как ты хочешь "плохо" запихать куда то литерал?
При рефакторе такое как правило проебывается. Поэтому суют в константы
Павел
При рефакторе такое как правило проебывается. Поэтому суют в константы
Как правило, type в данном случае будет любой string. За ним следить не надо в этом и суть
The Ant
Его тоже могут переименовать
Павел
Представь что это микросервис комментов. Пацаны его сделали и он работает, его даже не поддерживают. Комманда распустилась Зачем там вводить ограничение на type?
Павел
Это даст ровно нихера, кроме случайной ошибки, на которую тоже пофиг
The Ant
Зачем он там вообще? ) это проблема внешних сервисов, идентифицировать у себя там чтото
Павел
Без коллизий
The Ant
В сервисе комментов не нужно. Достаточно просто по иду пачку записей запросить
Павел
Тем более что parentId может быть не uuid
The Ant
Зависит от частоты, да
Павел
Зависит от частоты, да
Тогда зачем нам проблемы?
Павел
Сделай просто type и не парься
The Ant
Хз 🤷
Павел
Один сервис будет ходить и хранить по getList('album', uuidId1) другой по getList('user', intId1)
Павел
Можно и int и что угодно передавать
Павел
Но правда в строковом формате
The Ant
На самом деле коллизии с типом тоже будут возможны, с ууидом)
Павел
На самом деле коллизии с типом тоже будут возможны, с ууидом)
Не будут. uuidId1 и intId1 это pk в рамках своих таблиц. А album и user - грубо говоря названия таблиц.
Павел
На самом деле коллизии с типом тоже будут возможны, с ууидом)
Мы говорим про коллизии на уровне модуля комментов
Павел
Что он может отдать некорректные данные
The Ant
Вот со счётчиком проблема да. Но решаема лишним запросом в сервис с последующим кешированием. В остальном хз. Ну м.б. ещё показать 1-2 последних коммента
The Ant
Может мое тож нормально. Сходу накинулся )
Павел
Может мое тож нормально. Сходу накинулся )
Да ты сам уже несколько проблем подтвердил )) но ты все равно ишешь варианты как это использовать и решать проблемы, когда можно просто их не создавать изначально)))
The Ant
Да ты сам уже несколько проблем подтвердил )) но ты все равно ишешь варианты как это использовать и решать проблемы, когда можно просто их не создавать изначально)))
Ну хз, твой вариант на сохранение это дискриминатор на запись. Он в атрибутах вообще. Но все равно создаёт каплинг. Потому что зависимости явно прописываются. Потом, тип нужен по большому счету для того, чтобы аатоинкремет не пересекался в полиморфных таблицах. С ууидом этой проблемы быть не должно. Как-то так
The Ant
Хз, я сам не уверен можно ли считать за каплинг зависмость в атрибутах... 😄
Павел
В модуле комментов нет никаких связей ко внешним модулям
Павел
Там просто еще один пропс, который #[column(type='string')]
The Ant
Что за зависимость в аттрибутах?
Явно прописанные связи в дискриминаторе
Павел
Явно прописанные связи в дискриминаторе
Не будет там дискриминаторов никаких
Павел
С точки зрения модуля комментов, добавляется только #[column(type='string')] string $type
Павел
Там не будет разных сущностей
Павел
Только одна Comment
The Ant
Выше уже говорил, просто стринг поддерживать тяжко будет. Надо будет поменять тип и чо делать? Миграцию писать?
The Ant
Или отдельные апи ендпоинты
Павел
сделай 2 стринга 256 string type string parentId и покроешь 99,9 кейсов наверное
The Ant
Ну вот мне надо будет поменять значение в поле type, как?
The Ant
Хз, приспичит
Павел
Хз, приспичит
Это не ответ
Павел
Это тоже самое, что поменять названия констант, енамов, а потом думать что делать с БД
The Ant
Назвал тип неудачно. Или появилась похожая сущность или ещё какая дичь.
Павел
Про это и речн
ой ладн, уже какой то бред пошел. Придумываю несуществующие проблемы
Павел
Ты type='sdfdsf234234' хоть так назови, в коде прост сделай const TYPE= ''sdfdsf234234'
Павел
И тебе никогда не нужно будет знать что он sdfdsf234234
Павел
А если уж пошло за треш, то именно модуль комментов может выдавать type чтобы гаранировать уникальность
Павел
т.е. сделать в нем регистрацию и он выдаст client_id (type)
Павел
Как делают все внешние сервисы когда ты передаешь его
The Ant
Обычно все по другому ) и заранее не думают. Вот как ты сейчас, говоришь что это бред ) назвал бы article и все. Потом позже появился бы ещё один такой тип, и ты захочешь поменять. Тип articlefoo, articlebar
The Ant
Именно так и будешь думать
Виктор
дискриминатор - это объектная штука - позволяет твои энтити наследовать.. А тебе тут наследование не нужно. Достаточно просто поле с типом и id родителя хранить
В общем попробую сейчас вот так зарефакторить. А как в таком случае лучше получать сущности родителей? Допустим, у меня несколько десятков комментариев. И три типа родителей. Просто через соответствующие репозитории?
Павел
Обычно все по другому ) и заранее не думают. Вот как ты сейчас, говоришь что это бред ) назвал бы article и все. Потом позже появился бы ещё один такой тип, и ты захочешь поменять. Тип articlefoo, articlebar
Так похер же, это ключ связи который нигде не фигурирует по факту кроме запросов. Хоть "выаываыва23323kljkjkj" назови, только не меняй Ты когда нить обращался к внешнему сервису с вопросом: "мне не нравится ключ доступа который вы выдали, сделайте красивый" ?)
Павел
Тут я сам задаю ключ, и это другое 😄
По факту одно и тоже. Просто без сложностей. Сделай так чтобы модуль комментов выдавал "dsfsdf234234" и узбогойся)))
The Ant
Будет все "по фен-шую", вдруг я в прод базу полезу, и должен буду понимать чё там
Павел
Будет все "по фен-шую", вдруг я в прод базу полезу, и должен буду понимать чё там
Когда ты лезешь в прод базу в артикл и видишь categoryId= uuid что сразу понимаешь что там под ним хранится?) И тут так же. Не придумывай проблем
Павел
type может быть и uuid и что угодно. Человекчитаемым он быть не должен, да и никому не нужно
Павел
С точки зрения комментов - им не нужено знать какой коммент к чему относится, с точки зрения поиска - им дадут конреный тип
The Ant
Может да, но будет человекочитаемым с вероятностью 99.99% )
Павел
Может да, но будет человекочитаемым с вероятностью 99.99% )
Это если ты сам задаешь. Меняем кейс на выдачу type комментами, так такого уже не будет. Но главный флоу работы не меняется
Павел
Короче я хз че мы тут обсуждаем)) проблемы которые ты хочешь сделать но можно легко их не делать?)
The Ant
Ладно крч. Уже рили хуйней страдаем. Но я как нить все равно попробую без типа 😄 при возможности
The Ant
С комментариями в целом все сложнее чем кажется на первый взгляд. Все очень зависит от задачи. Если просто отсортировать по счётчику комментов это одно, если надо наиболее цитируемое за последние сутки, то вообще другая реализация будет. Для последних комментов на сайте отдельный пиздец. В обзоре показать под постом последние 3 коммента тоже будет не просто.