多重调度或嵌套调度

Multi dispatching or nested dispatching

我的商店有两个字段:

当用户购买商品时 我调用 apiService 如果服务器的响应允许您添加商品(服务器将检查用户是否有足够的钱)我可以在我的商店中进行两项更改:

  1. 将新项目推送到数组
  2. 减少钱

我对什么是调度操作的良好做法感到困惑... 哪种方式最好?

  1. 多调度 - 调度 AddItem 操作和 DecreaseMoney 操作:
store.dispatch([new AddItem(), new DecreaseMoney()]);
  1. 订阅 AddItem 操作并在第一次成功时发送 DecreaseMoney 操作:
this.actions$.pipe(ofActionSuccessful(AddItem)).subscribe(() => {store.dispatch(new DecreaseMoney()});
  1. AddItem 动作中调度 DecreaseMoney 动作:
@Action(AddItemAction)
  AddItem({ getState, setState }: StateContext<any>) {
    const state = getState();
    return this.http.post(`${apiUrl}/buy`, {}).pipe(
      tap(newItem => {
        setState({...state, items: [...state.items, newItem]});
        dispatch(new DecreaseMoney()); // <---
      })
    );
  }

如果操作不会改变同一块状态,我建议使用多分派,因为它不那么冗长。如果您依赖第一个异步操作返回的响应,我认为您的嵌套设置是合乎逻辑的。但是,您似乎没有将任何内容传递给 DecreaseMoney()...所以第一个选项似乎是最好的。

编辑:

我会选择选项 2,因为这可能是一个特定的场景。如果您将所有逻辑都放在您的操作中,那么您就是将 DecreaseMoney() 耦合到 AddItem()。通过将业务逻辑放在 component/container 中,您可以创建可重用的操作。这就是我个人会做的。