212 похожих чатов

Приветствую комрады! У нас есть 2 равнозначных сущности, состояние которых

зависит друг от друга. Нам нужно гарантировать их транзакционную согласованность. Не итоговую. Простой пример: товары с динамическими наборами свойств. При изменении свойства, которое уже используется в каких-то товарах, должна происходить какая-то бизнес-логика.

Например, нельзя сделать свойство обязательным для заполнения, если хотя бы у одного товара есть это незаполненное свойство. Пришли к тому, что такую согласованность может гарантировать доменный сервис. Вопрос заключается в следующем: как нам максимально защитить изменение этого состояния мимо сервиса-оркестратора?

Пока я вижу только 1 способ. И это изменение состояние сущности с помощью рефлексии в сервисе-оркестраторе. Т.е., в сущности не должно быть публичного метода:

public function markRequiredForValueFilling(ProductManager $actor): void

Он должен быть только приватным. Понятное дело, что при большом желании на прикладном уровне можно сделать тоже самое. Но над этим нужно будет специально заморочиться, а не просто вызвать:

$spec->markRequiredForValueFilling($actor);

7 ответов

10 просмотров

Ну еще вариант сервис передать в саму сущность, который проверит что надо и даст подтверждение/отклонение

Транзакционная консистентность это же по агрегаты?

Nikolay-Deriglazov Автор вопроса
John Doe
Транзакционная консистентность это же по агрегаты?

Не могут они быть агрегатами. Отношение *-*

Nikolay-Deriglazov Автор вопроса
Nikolay Deriglazov
Вначале мы думал что это агрегаты, да)

https://www.typescriptlang.org/play#code/MYGwhgzhAEDCYCdoG8BQ0PQJYBMBc0EALglgHYDm0AvNAOQCMdA3OpjqQG4CmCAkjggFipSgG0AujWiTWbDGBw4AIl14AKDlh4ICq7bwCUKeZgxYAZtHVEAFlggA6LToFOQ3SnYwA+WgBZjNDMQzDsEAHsAd2gybhiAUQRIhHU6ABUIiOgAWzAyAE9oF14IOkNWUIwAX1RTMzsHZzV+QUcABwBXCFtNFsdcCrqq6BIi4JH2fsUceFTGiCGR6uhgMCJgW2tuIPqqheaDVqd2iPb1Ib3Q8Ojobkqq2rNa2tRQSBh9HRMzXGESchUWiMFimNbHf6iCiSaSyYaYGZzdTgghzXYjSzWA7gtyODxeLZ+aAAJnRkwwNxicUSyQiqQyWVy+SK4LKS0e8NCmPUAEJwYdXG1yKBOjhuBAbPYnIMyeTKbF4tAkik0gBVCDcVaIRwzL68XLcOwRHCjbIfLAUMjQMBahDlB6hV4jbGIXFdHrI7WDB3QF51CydMjAIhYCJW7rceAai4-TDAMPEW3SalwRAXH3xsiJkpIWgpvWpS5mfm6lp9I5FuMJiIePERCiehBDV6oCNR7jpoA

Nikolay Deriglazov
Не могут они быть агрегатами. Отношение *-*

А, ну да. Если многие ко многим, то, чтобы гарантировать наличие связи, надо либо делать один жирный агрегат, либо делать несколько, но в некоторых юзкейсах бизнес правило на наличие связи будет выходить за границы агрегатов. Ну либо eventual consitency

Похожие вопросы

Обсуждают сегодня

читать файл максимально быстро? странный вопрос))
zamtmn
53
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
1
Святости? Когда дотумкаешь что открытое лучше закрытого - кастани
zamtmn
9
я имею в виду официально интегрированный в телегу? в том плане что не сливает переписку с пользователем?
Andrey
9
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
19
Кто-нибудь решал проблему с автоматическим скроллингом к выбранной ячейке в TDBGrid в Lazarus? Проблема в том, что есть допустим 3 столбца, третий столбец виден наполовину, вк...
Дмитрий Логинов
1
Приветствуем всех! Устали без проектов? Если вы программист и хотите получать стабильные заказы, компания Elif предлагает вам недельный курс по поиску проектов и их ведению. ...
Elif
1
ты вот так хотел? а пурджить arg бесполезно это не макрос, вот рестроить arg смысл есть, но в конце области видимости, а не перед началом новой области видимости.
ProMiNick
7
Карта сайта