Skill 持久化后端 behaviour。
v0.2 新增 — 把 CMDCSkillEngine.Store 的存储细节从 GenServer 主体里解耦,
让同一个 GenServer 可以在不同场景下挂载不同后端:
CMDCSkillEngine.Store.Backend.ETS(默认)— 进程内、重启即丢,零依赖CMDCSkillEngine.Store.Backend.SQLite— 文件持久化,跨重启保留版本 DAG 与计数器
约定
- 所有回调接收/返回
state,由 Store 持有、不可见于外部调用方 - 回调 不得抛异常,失败返回
{:error, reason} save_record/2负责 upsert(若skill_id已存在则覆盖)update_counters/3必须原子性保证同一条 record 的四项计数递增是一致的list_all/1返回全部 record,由Store客户端过滤is_active,让后端实现尽量简单
自定义后端
defmodule MyApp.PGBackend do
@behaviour CMDCSkillEngine.Store.Backend
@impl true
def init(opts), do: ...
@impl true
def get_record(state, skill_id), do: ...
# ...
end然后在 CMDCSkillEngine.Store.start_link/1 传入 backend: MyApp.PGBackend。
Summary
Types
@type state() :: term()
Callbacks
@callback get_record(state(), String.t()) :: {:ok, CMDCSkillEngine.Types.SkillRecord.t()} | {:error, :not_found}
@callback list_all(state()) :: {:ok, [CMDCSkillEngine.Types.SkillRecord.t()]} | {:error, term()}
@callback save_record(state(), CMDCSkillEngine.Types.SkillRecord.t()) :: {:ok, CMDCSkillEngine.Types.SkillRecord.t()} | {:error, term()}
@callback terminate(state()) :: :ok