REST новый идентификатор с DDD Aggregate - PullRequest
0 голосов
/ 26 апреля 2020

Этот вопрос на первый взгляд показался мне дураком, но потом я понял, что у меня пока нет правильного ответа, и, что интересно, также не нашел хорошего объяснения этому в своих поисках. Я новичок в концепциях доменного управления, поэтому, даже если вопрос базовый c, не стесняйтесь добавлять любые соображения к нему.

Я проектирую в Rest API для настройки экземпляров сервера и Я придумал агрегат с именем Instance, который содержит список Configurations, только одна указанная c конфигурация будет активна в данный момент времени.

Чтобы добавить конфигурацию, нужно вызвать конечную точку POST /instances/{id}/configurations с телом на желаемой конфигурации. В ответ, если все в порядке, он получит HTTP 204 с местоположением заголовка, содержащим новый идентификатор конфигурации.

Я планирую иметь только один контроллер, InstanceController, который будет вызывать InstanceService, который будет манипулировать агрегатом экземпляра, а затем сохранять его в репо.

Поскольку идентификаторы генерируются репозиторием, если я позвоню Instance.addConfiguration, а затем InstanceRepository.store, как я получу идентификатор вновь созданной конфигурации? ? Я имею в виду, что это List, так что это не тривиально, так как вызов Instance.configuration.identity

Опция реализует метод в Instance, например, getLastAddedConfiguration, но это кажется действительно хрупким.

Что такое общий подход в этой ситуации?

1 Ответ

0 голосов
/ 26 апреля 2020

идентификаторы генерируются хранилищем

Вы можете удалить эту дополнительную сложность. Поскольку Configuration является сущностью агрегата Instance, его Id должен быть уникальным только внутри агрегата, а не во всем приложении. Таким образом, самым простым является то, что Aggregate назначает ConfigurationId в методе Instance.addConfiguration (поскольку агрегат может легко обеспечить уникальность нового Id). Этот метод может вернуть новый ConfigurationId (или весь объект с идентификатором, если необходимо).

Каков общий подход в этой ситуации?

Я не уверен в общем подходе, но, по моему мнению, чем раньше вы создадите идентификаторы, тем лучше , Для Агрегатов вы должны создать Id перед его сохранением (возможно, GUID), для сущностей Агрегат может создать его в момент создания / добавления сущности. Это позволяет вам выполнять другие действия (например, публиковать событие), используя эти идентификаторы, без необходимости сохранять и извлекать идентификаторы из БД, что обязательно скажется на том, как вы реализуете и используете свои репозитории, и это не идеально.

...