实时股票监控系统六边形架构:轮询引擎归属方案咨询
轮询引擎的分层建议
先给出结论:推荐方案2b,即轮询线程的管理放在应用层,核心业务逻辑由领域层处理。下面逐个分析各方案的问题与合理性:
方案1(领域服务管理线程):不推荐
领域层的核心职责是封装业务规则、领域逻辑,而线程管理、定时调度属于技术实现细节,不属于领域范畴。把线程逻辑塞进领域服务会带来以下问题:
- 污染领域模型,让领域层依赖线程、定时任务等技术组件,降低领域逻辑的纯粹性;
- 大幅降低可测试性:测试领域服务时需要处理线程生命周期、调度时机等额外复杂度,无法专注于业务逻辑的验证;
- 违反单一职责原则:领域服务既要处理业务规则匹配,又要负责线程调度,职责混杂。
方案2(应用层管理轮询线程):合理方向
应用层的核心职责是协调业务流程、调用领域服务与外部适配器,线程调度作为流程执行的技术手段,放在应用层是合适的。
子方案2a:不推荐
应用层直接处理查询市场信息、匹配规则、创建日志、发送告警等核心逻辑,会导致业务逻辑分散到应用层,领域模型退化为简单的数据载体,失去DDD中领域层封装业务规则的意义。后期如果业务规则变更(比如匹配逻辑调整、日志生成规则修改),需要在应用层修改代码,难以维护,也无法利用领域层的封装性保证业务规则的一致性。
子方案2b:推荐
应用层负责以下技术与流程调度工作:
- 管理轮询线程的生命周期;
- 根据市场配置的工作时段、初始轮询间隔控制调度时机;
- 根据市场信息或订阅情况动态调整轮询频率;
- 调用外部适配器(市场信息源)获取最新市场数据;
- 调用领域层的业务方法(如
EvaluateMarketRules()),将市场数据传入; - 调用外部适配器(告警分发器)发送告警。
领域层负责核心业务逻辑:
- 接收市场数据,匹配订阅者的监控规则;
- 当匹配成功时,生成对应的日志领域模型;
- 返回匹配结果与日志信息给应用层。
这种划分的优势:
- 领域层专注业务逻辑,保持纯粹性,易于测试与维护;
- 应用层专注流程协调与技术实现,职责清晰;
- 业务规则的变更只需要修改领域层,符合DDD的架构原则;
- 外部适配器的调用由应用层统一协调,降低领域层对外部依赖的耦合。
内容的提问来源于stack exchange,提问作者Suomax
相关产品推荐
相关产品推荐

