主题
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>()
}判断方式
- 这是读数据,还是改世界?
- 改世界一律进
command - 只读查询才进
query