Spring数据休息域驱动设计 - 发布非聚合根实体

时间:2017-11-04 21:02:15

标签: java rest spring-boot domain-driven-design ddd-repositories

我正在使用spring boot数据REST进行在线拍卖REST api。我正在尝试使用域驱动设计方法。

我有2个实体.... Listing和ListedItem,其中列出的项目是待售项目,列表由ListedItem组成,并保存有关列表开始和结束时间的其他一些数据。

我觉得列表必须是这种情况下的聚合根,这样才能控制ListedItem,如果删除列表,项目也会被删除。

所以我有一个聚合根存储库(清单)。

我需要首先发布我的ListedItem,以便我可以使用其链接的ListedItem POST一个列表。

我现在如何使用spring数据休息POST一个ListedItem?没有为此公开端点,因为它没有自己的存储库。

我希望能够将ListedItem POST到/ api / lists-item但是如果我只有每个聚合路由的存储库,那么在使用ddd时我无法解决这个问题。

当然,如果我坚持下去,它仍然需要自己的存储库吗?

以下是我的实体和存储库,以防它有用:

@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 个答案:

答案 0 :(得分:0)

  

我需要首先发布我的ListedItem,以便我可以POST一个   列出其链接的ListedItem。

这是一种误解。如果Listing是聚合根,并且在没有它的ListedItem实体的情况下不能存在,那么两者都必须同时创建。因此,您最有可能POST只有/listings资源,并且必须同时创建Listing及其ListedItem transform: translate(0, -28px) rotate(-45deg);