Skip to content

State / Query / Action 边界

这一页只看职责边界:谁负责权威状态,谁负责只读,谁负责带副作用的调用。

定义

  • state():服务端权威状态写入,尤其是 sync:*
  • query():只读
  • command():有副作用
  • event():通知 / 上报

边界表

能力可否改 sync:*典型用途
state()可以服务端推状态到客户端
query()不可以列表查询、只读快照
command()可以购买、装备、技能释放
event()不推荐改埋点、关闭通知、行为记录

规则

任何会修改状态的逻辑都不要放在 Query。

正例

kotlin
BUIServerAPI.action().query().register("shop/main", "shop.list") { player, _, _, _ ->
    shopService.listItems(player)
}

BUIServerAPI.action().command().register("shop/main", "shop.buy") { player, _, storeId, payload ->
    val result = shopService.buy(player, payload)
    BUIServerAPI.state().setSyncValue(player, storeId, "gold", result.gold)
    result
}

反例

kotlin
BUIServerAPI.action().query().register("shop/main", "shop.bad") { player, _, storeId, _ ->
    BUIServerAPI.state().setSyncValue(player, storeId, "gold", 1)
    emptyList<Any>()
}

判断方式

  1. 这是读数据,还是改世界?
  2. 改世界一律进 command
  3. 只读查询才进 query