Size: a a a

Software Design/Architecture/Zen

2021 June 09

ST

Serguei Tarassov in Software Design/Architecture/Zen
Возвращаясь к ограничениям, я не вполне представляю себе проектирование в DDD стиле интегрированных снабжения, производства и кадров, с созданием и мониторингом производственного плана. Просто как пример. То есть как сделать, взяв отдельные куски я знаю, видел еще 30 лет назад, когда ломали мейнфреймы и ставили сети PC. Только это оказалось крайне неудобным.
источник

OR

Olexandr Ryabchuk in Software Design/Architecture/Zen
А чем программный код отличается от работы бизнеса?
Любой структурированный бизнес, это бюрократия.
С кипой необходимых бумаг и процессов в каждом из отделов.
Как раз ДДД и предназначен для максимального приближения програмного кода к реальной жизни
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Добрый день! Подскажите по конкурентным запросам...

Допустим есть посты, к постам могут добавляться комменты.
Условие - если у поста есть комменты, то пост удалять нельзя.

Код, например такой:

if ($commentsRepository->existsByPostId($post->getId())) {
 $postsRepository->delete($post);
}

Насколько вероятна ситуация, что условие будет нарушено при конкурентом выполнении запросов на удаление и на добавление комментария?

Я имею в виду что-то такое:

// Запрос "Удаление" - комментариев нет
if ($commentsRepository->existsByPostId($post->getId())) {
 
 // В этот момент добавляется комментарий в другом запросе "Добавить комментарий"
 
 // Запрос "Удаление" пытается удалить пост, который содержит комментарии.
 $postsRepository->delete($post);
}

Есть ли какое-то решение подобных коллизий кроме выполнения задач в один поток ( с помощью очередей) ?
источник

AV

Alexey Vetrov in Software Design/Architecture/Zen
Мне в голову приходят только локи бд. Еще можно на уровне бд/кода поиграться с version
источник

SF

Segmentation Fault in Software Design/Architecture/Zen
По хорошему такие нюансы решаются на стороне хранилище. Как правило классические СУБД предотвращают эти коллизии из коробки.
источник

i

igor kek in Software Design/Architecture/Zen
foreign ключи. Но от них все отказываются.
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
лок на всю таблицу комментариев?
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
на урвоне БД будет решено, но приложение ведь упадёт с ошибкой
источник

AV

Alexey Vetrov in Software Design/Architecture/Zen
Почему? Только на конкретную строчку lock for update повешать
источник

i

igor kek in Software Design/Architecture/Zen
отловишь и выдашь нормальную ошибку
источник

i

igor kek in Software Design/Architecture/Zen
При этом не придется проверять наличие поста
источник

RL

Romka Los in Software Design/Architecture/Zen
Оптимистик лок через версию - норм.
источник

AV

Alexey Vetrov in Software Design/Architecture/Zen
Я обычно решаю это version'ом. Раз это php код, то скорее всего знаете про doctrine
источник

SB

Sergei Baikin in Software Design/Architecture/Zen
например просто архивировать пост
удалить значит не показывать в UI
что у тебя там в базе людям фиолетово

Приявзять комент без связи а только по айдишнику
пусть себе добавляет и даже успешно
Какая разница то особо?
Прсото при обновлении страницы увидит что пост удален

ВТорой вариант имхо самый кошерный
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Мне нужно удалять пост, если у него нет комментариев. То есть с момента проверки, что комментов нет до удаления поста нужно запретить добавлять комментарии в этот пост. Как это сделать с помощью блокировки, не пойму(
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
М... интересно, а чистить потом в фоне.
источник

AV

Alexey Vetrov in Software Design/Architecture/Zen
Скорее всего вам тут именно version подойдет
источник

SB

Sergei Baikin in Software Design/Architecture/Zen
можно чистить а можно и забить
случаи будут очень редкими
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Я имел в виду помечать "пост на удаление". И потом в фоне ночью проходить и сносить такие посты вместе с комментами и файлами и прочим.
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Как это загуглить? не сталкивался с версиями...
источник