2

我正在学习使用 Lagom 框架,但无法理解持久性方面的工作原理。

我的例子很简单:我有一个产品库存和几个创建、购买和订购产品的服务,这使得库存波动。目前,我坚持产品的库存数量以及每个库存移动以及添加/删除的数量。我想要实现的是只保留所有库存变动并从中创建产品。

我对 Lagom 框架的理解是,我不应该坚持产品,而应该坚持股票变动的事件。这样,如果我想知道产品的库存,就会以某种方式处理事件以检索当前状态。

在我的服务实现中,这是我目前获取产品状态的方式:

@Override
public ServiceCall<String, NotUsed, Source<Product, ?>> getProduct() {
    return (id, req) -> {
        Source<Product, ?> result = session.select("SELECT * FROM products WHERE id = ?", id)
                .map(row -> new Product(row.getString("id"), row.getString("ean"), row.getLong("quantity")));
        return CompletableFuture.completedFuture(result);
    };
}

这是我添加股票的方法:

@Override
public ServiceCall<String, Stock, NotUsed> add() {
    return (id, request) -> {
        log.info("EAN: {}. Supply order received.", id);
        PersistentEntityRef<StockCommand> ref = persistentEntityRegistry.refFor(StockEntity.class, id);
        return ref.ask(new StockCommand.AddStock(request.amount)).thenApply(r -> NotUsed.getInstance());
    };
}

Lagom 有没有办法仅通过持久事件来重建产品状态?如何满足我的需求?

4

1 回答 1

2

抱歉,我发现您的示例非常令人困惑。所以你有多个产品的库存。每个产品都有一个计数(表示有多少项目可用)。随着产品的购买,订单流程减少计数,仓库交付流程增加库存(因此计数)。

您可以使用state()命令中的函数来获取状态。

有关类似用例的更多详细信息,请参阅https://github.com/orefalo/lagom-sample-bank 。

希望这可以帮助,

于 2016-07-13T16:13:20.403 回答