【发布时间】:2021-08-15 05:44:02
【问题描述】:
我正在使用 golang 开发一个程序,我正在构建基于六边形架构的程序。我想我的脑子里大部分时间都围绕着这个想法,但有些东西我就是想不通。
该程序的功能是监控多个 IP 摄像机的警报事件,接收器可以通过 HTTP2.0 PUSH REQUEST 接收实时警报事件流。 (以防万一这不是技术术语,我的服务从 GET 请求建立 TCP/HTTP 连接并保持打开状态,当摄像头触发警报事件时,摄像头将其推回服务)
架构层次
适配器
- HTTP 处理程序
- 内存中 JSON 存储
端口
- 设备服务接口
- 事件服务接口
- DeviceRepo 接口
- EventRepo 接口
服务
- 设备服务
- 事件服务
域
- 设备域
- 事件域
用户通过 API 向系统添加设备,请求中包含所需的监控时间表(接收器应每天启动和停止的时间)和 url。
调度器负责定期检查接收器是否要根据其调度启动。如果它打算为某个设备运行,它会为该设备启动一个接收器。
接收器建立与 IP 摄像机的连接并循环处理警报事件并将其传递给 EventService 的警报事件流。
EventService 接收事件,并负责处理事件,根据领域逻辑,决定是发送邮件还是忽略它。它还将所有事件保存到 eventrepo。
我不确定它们位于何处的两部分代码是调度器和接收器。他们也应该如此; 一种。两者都在同一个包中并放置在 Adaptors 层 湾。 适配器层中的接收器和服务层中的调度器 C。 服务层中的调度器和接收器?
我只是感到困惑,因为接收器不是由用户直接启动的,而是由一个不断检查条件的运行循环启动的。但对于不同品牌的相机,我也可能有不同的接收器。这是一个实现细节,这意味着接收器应该在适配器层中。这让我觉得选项 b 是最好的。
我可能想多了,但请告诉我你们认为最好的选择是什么,或者建议一个更好的选择。
【问题讨论】:
标签: go architecture domain-driven-design clean-architecture hexagonal-architecture