Registry 注册表
Monoceros 里很多系统都遵循同一套思路:先注册,再通过 ID 获取,再按 ID 卸载或重载。
这背后依赖的就是统一的 Registry<T> 注册表接口。
哪些系统在用注册表
| 系统 | 典型注册对象 |
|---|---|
| 脚本系统 | 脚本定义 |
| 分发器 | 分发器定义 |
| 调度系统 | 调度定义 |
| 工作流 | 动作节点、属性访问器 |
| 扩展系统 | 扩展实例 |
| 命令系统 | 命令定义、补全器 |
| 类型转换 | Applicative |
注册表提供了什么能力
这类系统通常都会支持:
register:注册一个对象unregister:卸载一个对象get:按 ID 获取对象contains:检查某个 ID 是否存在keys/values:列出当前已注册内容clear:清空整个注册表
为什么这很重要
正因为 Monoceros 几乎所有模块都建立在注册表模型上,所以它才能稳定实现:
- 热重载
- 增量更新
- 按 ID 精准启停
- 配置和运行态分离
举个例子:
- 你删掉一个调度 YAML 文件
- 文件监听发现变更
- 系统找到这个文件对应的定义 ID
- 再通过注册表把它精确卸载
整个过程不需要全量重启。
对服主有什么实际价值
对服主来说,这意味着:
- 资源文件可以按功能拆分
- ID 可以稳定引用
- 你能更放心地做局部热更新
所以在 Monoceros 里,一个好记、稳定、不冲突的 ID 命名方案非常重要。