HomeTom 是一套采用领域驱动设计与洋葱架构的异步智能家居编排系统。它以 Home Assistant 作为硬件抽象层,负责管理设备、场景与执行过程。
围绕行为建立模型
项目划分为三个上下文:
- 设备描述硬件能力与状态同步;
- 场景定义触发器、条件和动作;
- 执行记录运行状态、重试策略与最终结果。
这样可以避免 API 处理器和硬件客户端逐渐变成所有业务规则的堆积处。
让基础设施留在领域之外
FastAPI 接收请求并把工作交给应用层。领域代码依赖接口,而不是数据库或 Home Assistant。SQLAlchemy 仓储和 HTTP 客户端只在系统边缘实现这些接口。
trigger = schedule.next()
execution = orchestration.start(scene, trigger)
result = await workflow.run(execution)
await events.publish(result.events)
具体语法并不重要,关键是依赖方向:外部系统发生变化时,不需要重写定义有效场景或执行过程的核心规则。
把失败视为领域状态
网络硬件缓慢且并不可靠,超时、重试和部分失败都是正常运行条件。执行模型会明确记录这些状态,领域事件则让日志和通知离开主要命令路径。
这套设计并不承诺分布式硬件永远正常,而是让系统在出现问题时能够解释发生了什么,并以可预测的方式恢复。