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 однажды.

Другие вопросы по тегам