Spring data rest 领域驱动设计 - 发布非聚合根实体
Spring data rest Domain Driven Design - Posting non aggregate root entities
我正在使用 spring 引导数据 REST 进行在线拍卖 REST api。我正在尝试使用域驱动设计方法。
我有 2 个实体....Listing 和 ListedItem,其中 Listed item 是待售商品,Listing 由 ListedItem 组成,并包含有关列表开始和结束时间等的一些其他数据。
我觉得在这种情况下,Listing 必须是聚合根,这样才能控制 ListedItem,如果我删除 listing,该项目也会被删除。
所以我有一个聚合根(列表)的存储库。
我需要先 POST 我的 ListedItem,然后我才能 POST 一个列表及其链接的 ListedItem。
我现在如何 POST 使用 spring 数据休息的 ListedItem?没有端点为此公开,因为它没有自己的存储库。
我希望能够 POST ListedItem 到 /api/listed-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> {
}
I will need to POST my ListedItem first so that I can then POST a
listing with its linked ListedItem.
这是一种误解。如果 Listing
是聚合根并且没有它的 ListedItem
实体就不能存在,那么必须同时创建两者。因此,您很可能只是 POST
到具有必要数据的 /listings
资源来同时创建 Listing
和 ListedItem
。
我正在使用 spring 引导数据 REST 进行在线拍卖 REST api。我正在尝试使用域驱动设计方法。
我有 2 个实体....Listing 和 ListedItem,其中 Listed item 是待售商品,Listing 由 ListedItem 组成,并包含有关列表开始和结束时间等的一些其他数据。
我觉得在这种情况下,Listing 必须是聚合根,这样才能控制 ListedItem,如果我删除 listing,该项目也会被删除。
所以我有一个聚合根(列表)的存储库。
我需要先 POST 我的 ListedItem,然后我才能 POST 一个列表及其链接的 ListedItem。
我现在如何 POST 使用 spring 数据休息的 ListedItem?没有端点为此公开,因为它没有自己的存储库。
我希望能够 POST ListedItem 到 /api/listed-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> {
}
I will need to POST my ListedItem first so that I can then POST a listing with its linked ListedItem.
这是一种误解。如果 Listing
是聚合根并且没有它的 ListedItem
实体就不能存在,那么必须同时创建两者。因此,您很可能只是 POST
到具有必要数据的 /listings
资源来同时创建 Listing
和 ListedItem
。