2015-01-26 4 views
0

Я нахожу упоминания во многих ответах на вопросы Spring Design, связанные с дизайном Spring, с «Совокупным корнем» и «Сущность» вместе с «Объектами ценности».Как сделать POST на зависимом объекте без резервного хранилища

И я думаю, что Репозиторий приравнивается к Агрегатному корню.

СЛУЧАЙ 1

Мой вопрос вокруг этого, говорят, что есть 2 предприятия - пользователя и UserSettings, представленные в базе данных в виде таблиц и 2 UserSettings, имеющих внешний ключ user_id, указывающий на пользователя.

В этом случае я хотел бы сделать GET/POST как на пользователе, так и на UserSettings. Из некоторых сообщений я узнал, что репозитории должны быть на уровне совокупности, что в данном случае означало бы размещение репозитория только для Пользователя, поскольку UserSettings полностью зависит от пользователя.

Прямо сейчас у меня есть 2 хранилища с двунаправленными отношениями, по одному для каждого i.e UserRepository и UserSettingsRepostory, которые отображаются как службы REST.

В результате, я POST на UserSettings и Пользователем

/app/userSettings 
/app/users 

, получить я использую для UserSettings & пользователя -

/app/users/{id}/userSettings 
/app/users/{id} 

Если я не подвергать UserSettingsRepository, что будет быть эквивалентным POST на /app/userSettings, где я в настоящее время делаю, как показано ниже:

СЛУЧАЙ 2

Аналогично, если имеются следующие лица/Таблицы - Пользователь, UserPost и UserComment - здесь UserComment имеет 2 внешних ключей как UserPost, а также пользователь.

Я предполагаю, что здесь у нас есть 2 совокупных корня и поэтому должны иметь 2 хранилища, такие как UserRepository и UserPostRepository.

Еще один способ задуматься о том, что, поскольку все зависят от пользователя, и поэтому у нас может быть только 1 репозиторий только для UserRepository.

Здесь тоже, вопреки моему текущему состоянию, когда у меня даже есть UserCommentRepository, я не уверен, как сделать POST на UserComment после его удаления.

+0

Я нашел некоторые ссылки здесь - https://github.com/olivergierke/spring-restbucks/blob/master/src%2Ftest%2Fjava%2Forg%2Fspringsource%2Frestbucks%2Forder%2FOrderRepositoryIntegrationTest.java – fortm

ответ

1

Если вы хотите взаимодействовать с UserSettings отдельно, им необходимо стать выделенными ресурсами, а это значит, что они больше не являются частью агрегата User. Агрегат гарантирует, что определенные утверждения сохраняются в себе, убедившись, что никто не манипулирует состоянием его частей. Поэтому, если вы хотите сделать последнее, совокупность больше не является совокупностью. Spring Data REST просто предоставляет эти концепции на уровне HTTP.

Чтобы User и UserSettings вместе вы в основном есть два варианта:

  • ввести специальный переход состояния для ресурса пользователя, добавив ссылку. Определите поддерживаемые HTTP-глаголы и структуру данных для указанного ресурса.
  • Используйте операцию HTTP PATCH на ресурсе пользователя, чтобы управлять частями ресурса.
Смежные вопросы