Павел
Виктор
public function create(
AlbumComment|PhotoComment|TextComment $comment,
Request $request,
Album|Photo|Text $parent
): bool {
$this->form = $this->ff->createNamed(
'comment_form',
CommentFormType::class,
$comment
);
$this->form->handleRequest($request);
if ($this->form->isSubmitted()) {
$this->formSubmitted = true;
if ($this->form->isValid()) {
$comment->setParent($parent);
$comment->setAuthor($this->security->getUser());
$comment->setPublishedAt(new DateTimeImmutable());
$this->em->persist($comment);
$this->em->flush();
$this->formValid = true;
return true;
}
}
return false;
}
Павел
Павел
Кто достает Album|Photo|Text $parent ?
Виктор
Это не контроллер, CommentService.
Павел
Виктор
Метод вызывается из контроллеров для каждой сущности.
Виктор
А там уже одна сущность инжектится по slug.
Павел
Понятно. Ну сервис сам по себе уже не очень. Тем более в нем реквест
Павел
Это какое то объекдинение для копипаста в контроллере
Сергей
сервис знает про формы, их сабмит, про все виды комментов....
надо сервис переписать))
Павел
Виктор
Виктор
В двух словах, как это должно выглядеть?
Сергей
надо из комментов убрать знание о родителе. Либо сделать поле с типом родителя. Думаю поведение у всех комментов одинаковое, поэтому никаких дискриминаторов тут не нужно.
И просто в хендлере создавать коммент, передавая туда текст и id родителя.
Павел
В двух словах, как это должно выглядеть?
Если формы + сущность хз. Я бы наверное вообще такие сервисы не делал. Оставил как есть в контроллере. Без объединения и все было бы ок.
Разные сущности, разные экшены, че их объединять
Виктор
А как же DRY?) Или тут не тот случай? Получается, эта простыня в нескольких контроллерах.
Павел
Павел
Почитайте что такое DRY
Павел
Вы разделили на разные сущности, да у них похожее поведение, но раз разные сущности, то оно может быть и разным
Павел
Либо вы разделили на сущности не верно
Виктор
Павел
Виктор
Либо вы разделили на сущности не верно
Вероятно это. Я сейчас GoF пытаюсь осилить, и уже предполагаю, что нужно было какой-то GalleryEntity делать, а от него уже Album и Photo. И комментарии разделять не было бы нужно.
Павел
Не нужно весь код окутывать связями.
Павел
Павел
У вас крудиловака без логики и GOF
Павел
Если прикрутите получится плохо)))
Павел
Что уже выходит
Виктор
У вас крудиловака без логики и GOF
Если честно, я хз тогда, как такое изучать)) Нужна же практика, а я хз, чё за проект нужен, чтобы это всё правомочно применять тогда)
Виктор
Павел
Если честно, я хз тогда, как такое изучать)) Нужна же практика, а я хз, чё за проект нужен, чтобы это всё правомочно применять тогда)
Легко, не брать ТЗ как блог.
Возьмте кредитный калькулятор, на разные товары с разными стретагиями расчетов кредита, чтобы это можно было созлдавать, редактивароть, и вычислять динамически
The Ant
Не понял, а как хранить связи? У меня же три сущности, к которым может относиться комментарий.
Я так ещё не делал конешь. Но.
Смотри. Если юзать ууиды, то для таблицы комментов не нужны никакие связи. Тупо по ууид связного ресурса сохраняешь и все. В системе все ууиды будут уникальными. Поэтому обозначать дополнительно тип или ещё какой буллшит не надо.
Даёт возможность сделать отдельный модуль/сервис с комментами, которые сами по себе и ни от кого не зависят.
Павел
Павел
Когда в рамках одной - там гарантия уникальности, а когда уже несколько таблиц - такой гарантии нет
Виктор
Виктор
Механика та же.
The Ant
Павел
The Ant
Павел
The Ant
Павел
Павел
Нужно понять какой родитель у коммента
The Ant
Если все таки раз в столетие случится коллизия, так ли важно для коммета, если он не добавится? И понадобится повтор написания? Мне кажется пофигу )
Виктор
Нужно понять какой родитель у коммента
Ну у меня так как раз. Есть "последние комментарии", у каждого ссылка на свою сущность. То есть нужно, чтобы связь двусторонняя была. И тут этот вопрос актуален.
Павел
Короче лишний возможный гемор не понятно с каким профитом. Тип нужен
Павел
The Ant
Павел
Короче ты предлагаешь сложности без профита.
Павел
Причем сам какой то профит не предлагаешь
The Ant
Профит сомнительный да. Отсутствие лишней колонки. Простой пк 🤷
Повторю сам так не делал. Это типа "что если?" 😄
Но опять же. Этот счётчик нужен? М.б. из комментов получать инфу о количестве. Кешить тупо этот счётчик.
The Ant
Так-то для твоего ивента придется связи обозначать, а это каплинг получится
Павел
The Ant
В монолите мб и пофиг, а в модульном монолите уже межмодульное взаимодействие
Павел
Павел
Павел
Модули и так и так должны общаться, без этого никак
The Ant
Павел
Или через синк или через шину
Павел
Павел
Там просто string type, string parentId
The Ant
Павел
Павел
Ну или enum
The Ant
Это плохо для поддержки. Как минимум константа будет
The Ant
Или енам да
Павел
The Ant
Литералом точно нет )