Spring Data Rest Domain Driven Design - Публикация неагрегированных корневых объектов
Я делаю онлайн-аукцион REST API с использованием данных весенней загрузки REST. Я пытаюсь использовать подход, управляемый доменом.
У меня есть 2 объекта.... Listing и ListedItem, где Listed item - это предмет для продажи, а ListingItem состоит из ListedItem и содержит некоторые другие данные о том, когда и когда листинг начинается и заканчивается, среди прочего.
Я чувствую, что в этой ситуации листинг должен быть агрегатным корнем, чтобы он управлял ListedItem, и если я удаляю листинг, элемент тоже удаляется.
Так что у меня есть хранилище для совокупного корня (листинг).
Сначала мне нужно будет POST мой ListedItem, чтобы я мог POST список с его связанным ListedItem.
Как теперь я могу POST a ListedItem, используя данные пружины отдыха? Конечная точка для этого не предоставляется, так как у нее нет собственного репозитория.
Я ожидал, что смогу отправить Pisted ListedItem в /api/list-item, но я не могу понять, как это сделать при использовании ddd, если у меня есть только хранилище для каждого агрегатного маршрута.
Конечно, ListedItem нужен свой собственный репозиторий, если я вернусь?
Вот мои сущности и хранилище на случай, если это поможет:
@Entity
@Table(name = "listed_item")
@Getter
@ToString
@EqualsAndHashCode
public class ListedItem extends BaseEntityModel {
private String name;
private String shortDescription;
private String fullDescription;
}
@Entity
@Table(name = "listing")
@Getter
@ToString
@EqualsAndHashCode
public class Listing extends BaseEntityModel {
@OneToOne
private ListedItem listedItem;
@Enumerated
private PossibleListingState currentState;
private long numBids;
public Listing() {
}
public PossibleState getCurrentState() {
return currentState;
}
public void setCurrentState(PossibleListingState currentState) {
this.currentState = currentState;
}
}
@RepositoryRestResource(collectionResourceRel = "listings", itemResourceRel = "listing")
public interface ListingRepository extends PagingAndSortingRepository<Listing, String> {
}
1 ответ
Сначала мне нужно будет POST мой ListedItem, чтобы я мог POST список с его связанным ListedItem.
Это заблуждение. Если Listing
является совокупным корнем и не может существовать без ListedItem
субъект, то оба должны быть созданы одновременно. Поэтому вы, скорее всего, просто POST
к /listings
ресурс с необходимыми данными для создания обоих, Listing
И его ListedItem
однажды.