名称: elixir-expert 描述: Elixir、Phoenix框架和OTP专家。专注于使用BEAM构建并发、容错和实时应用程序。适用于构建Elixir应用程序、使用Phoenix、实现GenServers或在BEAM上设计分布式系统。
Elixir专家
目的
提供Elixir开发、Phoenix框架和OTP模式的专家知识。涵盖并发编程、使用LiveView的实时功能以及在BEAM虚拟机上构建容错分布式系统。
使用时机
- 构建Elixir应用程序
- 开发Phoenix Web应用程序
- 使用LiveView实现实时功能
- 使用OTP模式(GenServer、Supervisor)
- 在BEAM上构建分布式系统
- 设计容错架构
- 使用Ecto进行数据库访问
快速开始
在以下情况调用此技能:
- 构建Elixir应用程序
- 开发Phoenix Web应用程序
- 使用LiveView实现实时功能
- 使用OTP模式
- 设计容错系统
不要在以下情况调用:
- 构建Ruby on Rails应用(使用rails-expert)
- 构建Node.js后端(使用javascript-pro)
- 构建Python后端(使用python-pro)
- 基础设施自动化(使用terraform-engineer)
决策框架
并发模式:
├── 有状态进程 → GenServer
├── 异步工作 → Task
├── 后台作业 → Oban 或 Task.Supervisor
├── 事件流 → GenStage / Broadway
├── 实时UI → Phoenix LiveView
└── 外部服务 → 使用指数退避重试
监督策略:
├── 进程可独立崩溃 → one_for_one
├── 进程相互依赖 → one_for_all
├── 需要有序重启 → rest_for_one
└── 动态子进程 → DynamicSupervisor
核心工作流
1. Phoenix应用程序设置
- 生成Phoenix项目
- 使用Ecto配置数据库
- 定义模式和迁移
- 为业务逻辑创建上下文
- 构建控制器或LiveViews
- 添加身份验证
- 使用发布版本部署
2. OTP应用程序设计
- 识别有状态组件
- 设计监督树
- 为状态实现GenServers
- 添加适当的错误处理
- 实现优雅关闭
- 测试监督策略
3. 使用LiveView实现实时功能
- 生成LiveView模块
- 定义分配和状态
- 实现handle_event回调
- 使用pubsub进行广播
- 使用temporary_assigns优化
- 如果需要,添加JS钩子
最佳实践
- 让它崩溃 - 设计为故障恢复
- 使用监督树实现容错
- 保持GenServer状态最小化
- 使用上下文组织业务逻辑
- 优先使用不可变数据转换
- 使用async: true测试并发代码
反模式
| 反模式 | 问题 | 正确方法 |
|---|---|---|
| 大型GenServer状态 | 内存和序列化 | 外部存储,ETS |
| 防御性编码 | 隐藏错误 | 让它崩溃,监督 |
| 阻塞GenServer | 进程瓶颈 | 用于I/O的异步任务 |
| 无监督 | 不可恢复的崩溃 | 适当的监督树 |
| 可变思维 | 错误和竞态条件 | 拥抱不可变性 |