首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在六角形结构中,周期性的背景任务适合哪里?

在六角形结构中,周期性的背景任务适合哪里?
EN

Stack Overflow用户
提问于 2021-08-15 05:44:02
回答 3查看 926关注 0票数 6

我正在致力于一个在高朗的程序,我正在六角形建筑的基础上进行设计。我想我的头主要是围绕着这个想法,但有些事情我就是搞不懂。

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

体系结构的

适配器

Handler

  • In-memory
  • HTTP JSON存储

  • DeviceService Interface
  • EventService Interface
  • DeviceRepo Interface
  • EventRepo接口

服务

  • DeviceService
  • EventService

  • DeviceDomain
  • EventDomain

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

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

接收机建立与IP摄像机的连接,并在告警事件流上循环,处理告警事件并将它们传递给EventService。

EventService接收事件,并根据域逻辑负责处理事件,并决定发送电子邮件或忽略它。它还将所有事件保存到eventrepo。

代码的两个部分--我不知道它们在哪里--是调度程序和接收方。它们也应该是;a.都在同一包中,并放置在适配器层b. 适配器层中的接收器和服务层c中的调度程序c.服务层中的调度器和接收方

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

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

EN

回答 3

Stack Overflow用户

发布于 2021-08-18 09:12:23

如果它能帮助你,我的设计如下:

司机演员:

人类用户:使用驱动程序端口与应用程序交互:“用于添加devices"

  • Device (IP摄像机):使用另一个驱动端口向应用程序发送警报事件:”用于接收警报事件“

驱动行为者:

device.

  • Warning

  • 设备(IP摄像头):应用程序使用驱动端口“用于检查设备”与设备交互,以便根据接收者的日程安排每天启动和停止设备:当收到警报事件时,应用程序向他们发送电子邮件,而不是ignored.

  • Alarm事件存储:用于持久化应用程序接收的警报事件。

应用程序(“警报监视器”)执行以下业务逻辑:

devices").

  • It
  • 维护它必须监视的设备集合(“添加
  • 有一个"worker”(调度程序),它定期检查设备状态并根据设备的时间表启动/停止设备。
  • 处理从设备接收到的警报事件。当收到警报事件时,应用程序要么发送电子邮件,要么忽略它。并将事件存储在存储库中.

所以对我来说:

  • 调度器是业务逻辑的一部分,接收方
  • 是设备的适配器。它与http相关。

这是一幅画:

票数 2
EN

Stack Overflow用户

发布于 2021-08-17 01:44:05

“调度程序负责定期检查接收机是否打算根据其时间表启动”。

最终,对于应用程序来说,不管是人为按下"autoStartReceivers“按钮,还是通过调度过程来完成它,都无关紧要。因此,这是一个基础设施问题,调度程序是一个驱动适配器。您可能会有一个由调度程序定期调用的ReceiverService.autoStartReceivers服务命令。

现在,对于Receiver,我想说它取决于实现。如果Receiver不知道特定于基础设施/供应商的细节,而只进行协调,那么它可能属于应用程序/服务层。

例如,接收方可能使用抽象的EventSource (HTTP、WebSockets等)。并使用特定于供应商的orchestration. ( EventDecoder )来调整事件,然后将它们中继到EventProcessor,然后它实际上只执行EventProcessorEventSource & EventDecoder将是适配器。但是,如果Receiver知道具体的基础结构细节,那么它就成为一个适配器。

最后,所有这些都支持事件处理的核心领域的逻辑。核心域逻辑并不真正关心事件是如何捕获的,也可能也不关心结果是如何进行的。因此,它最简单的形式中的核心域可能是actions = process(event)纯函数。

票数 1
EN

Stack Overflow用户

发布于 2021-08-28 08:13:02

a.都在同一个包中,并放置在适配器层。

b.适配器层中的接收器和服务层中的调度程序

c.服务层中的调度程序和接收方?

接收器和调度器都是适配器。我不认为它们必须放在同一个包裹里,但你可以这样做。所以a是我最好的答案,因为.

接收器将你的应用程序连接到一个外部设备-- ip camara。因此,接收器是EventService端口的适配器。

调度程序通过DeviceService端口间接地管理接收方的生命周期。它启用或禁用ip camara,这将导致接收器的连接和断开。

从应用程序核心的角度来看,调度程序只是另一个适配器,它告诉DeviceService端口启用或禁用某些ip。这也可以由单击UI中的按钮的用户完成。调度程序只是对用户的一种技术帮助,它根据计划执行用户想要的任务。因此,调度程序也是一个适配器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68789016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档