1.6 KiB
1.6 KiB
ADR-001: 事件系统设计
状态:已采纳
日期:2025-01-28
决策者:开发团队
上下文
需要设计一个统一的事件系统,用于组件间通信。要求:
- 类型安全
- 易于扩展
- 统一的事件命名和参数格式
考虑的选项
选项1:使用Vue原生事件系统
- 优点:简单直接,无需额外实现
- 缺点:缺乏类型约束,容易出错
选项2:自定义事件总线
- 优点:解耦组件,支持全局事件
- 缺点:增加复杂度,可能过度设计
选项3:TypeScript类型定义 + Vue事件系统
- 优点:类型安全,保持简单,易于扩展
- 缺点:需要维护类型定义
决策
选择的方案:选项3 - TypeScript类型定义 + Vue事件系统
理由
- 类型安全:通过TypeScript类型定义确保事件参数类型正确
- 简单直接:使用Vue原生事件系统,不增加额外复杂度
- 易于扩展:新增事件只需在类型定义文件中添加
- 统一规范:通过类型定义强制统一事件命名和参数格式
后果
正面影响
- 类型安全,减少运行时错误
- 代码提示和自动补全
- 统一的事件命名和参数格式
- 易于维护和扩展
负面影响
- 需要维护类型定义文件
- 需要TypeScript支持
约束
- 所有事件参数必须使用对象格式
- 所有事件必须有TypeScript类型定义
- 事件名称使用kebab-case格式
相关决策
- 知识库/规范/架构规范.md - 事件系统规范