Size: a a a

Software Design/Architecture/Zen

2021 November 17

A

Alexander in Software Design/Architecture/Zen
Почему бд. Я на уровне сервиса внутри транзакции справшиваю репозиторий есть ли у него уже агрегат с таким слагом.

Я правда не понимаю зачем делать eventual consistency  в этом случае. Наверное не совсем понимаю сам процесс. Мне приводили кейс с регистрацией пользователй с уникальным имейлом. Решение было такое - регаешь, потом проверяешь, удаляешь и отравляешь email с извинениями. Звучит странно для меня
источник

A

Alexander in Software Design/Architecture/Zen
Тем более если операция внутри одного контекста, то почему не транзакции
источник

SP

Sergey Protko in Software Design/Architecture/Zen
и он отвечает тебе что "нету" пока другой запрос паралельно вставляет такой. транзакция тебе не поможет без лока таблицы. а лок таблицы = все посты входят в один агрегат
источник

SP

Sergey Protko in Software Design/Architecture/Zen
дивный мир temporal coupling и concurrency
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
наверное, он имел в виду вот это: https://www.javiercasas.com/articles/codata-in-action
источник

A

Alexander in Software Design/Architecture/Zen
Так ну лок, не лок это деталь реализации.

А вообще что почитать по этому поводу можно?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
источник

A

Alexander in Software Design/Architecture/Zen
Спасибо.

А что насчет инвариант slug = translited(title)? Такие инварианты не должны существовать из-за оверхеда или это допустимо?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
сделай для своих агрегатов фабрики которые будут следить за этими правилами
источник

SP

Sergey Protko in Software Design/Architecture/Zen
у тебя проблема не с агрегатами - у тебя проблема в том что ты не очень понимаешь что это (зачем они нужны и что должны гарантировать, раз такие вопросы про локи) + у тебя JS и ограничения языка.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
вообще есть еще статья don't create aggregate roots. она тоже предлагает не держать логику в конструкторе - у тебя всегда будет какой-то другой объект который может проверить все бизнесовые правила для начала жизни другого объекта
источник

SP

Sergey Protko in Software Design/Architecture/Zen
в целом все что происходит в конструкторе не является по факту "внутри агрегата". это все происходит в момент инициализации объекта - у нас по факту объекта то толком нет еще. не создан.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
с агрегатами удобнее на примерах которые больше подходят под них - например попробуй спроектировать какой-то процесс. аля убер
источник

SP

Sergey Protko in Software Design/Architecture/Zen
- пассажир может запросить поездку
- водители видят запрос на поездку и могут зааплаиться
- только один водитель за раз может быть заасайнен на поездку, кто первый тот и выйграл
- водитель может отменить только до момента пока он не взял пассажира
- пассажир может отменить пока не сел в машину
- водитель подобрал пассажира
- поездка началась...
источник

SP

Sergey Protko in Software Design/Architecture/Zen
вот такого рода задачу попробуй смоделировать. а для блогов оставь тупой круд
источник

SP

Sergey Protko in Software Design/Architecture/Zen
сразу скажу - не выдумывай сразу "какие у тебя агрегаты". сначала определись "какие у тебя правила" а потом вокруг них придумывай агрегаты. Если ты сразу скажешь "у меня есть пассажир, поездка и водитель" то это быстро заведет тебя в никуда
источник

SP

Sergey Protko in Software Design/Architecture/Zen
скажем тут можно выделить этапы флоу - есть явно "работа с заявкой на поездку" и есть "сама поездка".
источник

N

Nikita in Software Design/Architecture/Zen
А что за ограничения языка в этом контексте? Насколько я знаю, в пхп классы похожие на js. Или там тоже ограничения?
источник

A

Alexander in Software Design/Architecture/Zen
Спасибо. Я почитаю
источник

SP

Sergey Protko in Software Design/Architecture/Zen
в php ты можешь инстанциировать классы без вызова конструктора в целом. Что как бы дает возможность делать вид что объект просто все время живет в памяти и никуда там ни в какую базу не выпадает периодически. уверен что с кастылями такое можно и в js провернуть, просто "зачем"...
источник