在六边形体系结构中,周期性后台任务适合的哪个位置?

我正在开发一个golang程序,我正在基于六边形建筑进行修整。我想我的头脑主要围绕着这个想法,但有些事情我只是无法弄清楚。

该程序的功能是监控多个IP摄像机的报警事件,接收器可以通过HTTP2.0 PUSH请求接收报警事件的实时流。(以防万一这不是技术术语,我的服务从GET请求建立TCP / HTTP连接并保持其打开状态,当摄像机触发警报事件时,摄像机将其推送回服务)

架构层

适配器

  • HTTP 处理程序

  • 内存中 JSON 存储

港口

  • 设备服务接口

  • 事件服务接口

  • 设备存储库接口

  • 事件存储库接口

服务业

  • 设备服务

  • 事件服务

  • 设备域

  • 事件域

用户通过API将设备添加到系统中,请求包括所需的监视计划(当接收者每天启动和停止时)和url。

调度程序负责定期检查接收方是否要根据其调度启动。如果它打算为某个设备运行,它将启动该设备的接收器。

接收器建立与 IP 摄像机的连接,并循环遍历警报事件流,处理警报事件并将其传递到事件服务

事件服务接收事件,并负责根据域逻辑处理事件,并决定是发送电子邮件还是忽略它。它还会将所有事件保存到事件存储库中。

我不知道它们所在的两部分代码是调度程序和接收器。他们也应该如此。一个。两者都在同一封装中,并放置在适配器层b。适配器层中的接收方和服务 c 中的调度程序。服务层中的调度程序和接收方?

我只是感到困惑,因为接收器不是由用户直接启动的,而是由不断检查条件的运行循环启动的。但我也可能为不同品牌的相机提供不同的接收器。这是一个实现细节,这意味着接收器应该在适配器层中。这让我认为选项b是最好的。

我可能想得太多了,但让我知道你们都认为最好的选择是什么,或者建议一个更好的选择。


三国纷争
浏览 153回答 3
3回答

翻翻过去那场雪

如果它能帮助你,我的设计将如下:司机演员:人类用户:使用驱动程序端口与应用交互:“用于添加设备”设备(IP 摄像头):使用另一个驱动程序端口向应用发送警报事件:“用于接收警报事件”驱动演员:设备(IP摄像头):该应用程序使用“用于检查设备”的驱动端口与设备进行交互,以便根据设备的时间表每天启动和停止它。警告收件人:当收到警报事件时,应用会向他们发送电子邮件,并且不会忽略该事件。警报事件存储:用于保留应用收到的警报事件。该应用程序(“警报监视器”)执行以下业务逻辑:维护它必须监视的设备集合(“用于添加设备”)。它有一个“工作器”(调度程序),定期检查设备状态并根据设备的调度启动/停止它们。它处理从设备收到的警报事件。收到警报事件时,应用会发送电子邮件或忽略它。并将事件存储在存储库中。所以对我来说:调度程序是业务逻辑的一部分。接收器是设备的适配器。它与http的东西有关。这是图片:

MM们

“调度程序负责定期检查接收方是否应根据其调度启动”最终,对于应用程序来说,人类是按“自动启动接收者”按钮还是由计划过程完成并不重要。因此,这是一个基础结构问题,计划程序是一个驱动程序适配器。您可能有一个服务命令,该命令将由调度程序定期调用。ReceiverService.autoStartReceivers现在,我会说这取决于实现。如果不知道特定于基础结构/供应商的详细信息,而只知道协调,则它可能属于应用程序/服务层。ReceiverReceiver例如,也许接收方使用抽象(HTTP,WebSockets等)并使用(特定于供应商的)来调整事件,然后将它们中继到实际上只是在进行编排。& 将是适配器。但是,如果知道特定的基础结构详细信息,那么它就变成了适配器。EventSourceEventDecoderEventProcessorEventSourceEventDecoderReceiver最终,以上所有内容都是对事件处理的核心域的支持逻辑。核心域逻辑不会真正关心事件是如何捕获的,也可能不关心结果操作是如何进行的。因此,您的核心域在最简单的形式中可能是纯函数。actions = process(event)

拉丁的传说

一个。两者在同一封装中,并放置在适配器层b.适配器层中的接收方和服务层中的调度程序c. 服务层中的调度程序和接收方?接收方和调度程序都是适配器。我不认为它们必须放在同一个包中,但你可以这样做。对我来说,最好的答案也是如此,因为...a接收器将您的应用程序与外部设备-ip卡马拉连接。因此,接收器是端口的适配器。EventService调度程序通过端口间接管理接收方的生命周期。它启用或禁用ip卡马拉,这会导致接收器的连接和断开。DeviceService从应用程序核心的角度来看,调度程序只是另一个适配器,它告诉端口启用或禁用某些ip camara。这也可以由单击 UI 中的按钮的用户完成。调度程序只是对用户的技术帮助,它根据计划执行用户想要的任务。因此,调度程序也是一个适配器。DeviceService
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go