我正在致力于一个在高朗的程序,我正在六角形建筑的基础上进行设计。我想我的头主要是围绕着这个想法,但有些事情我就是搞不懂。
该程序的功能是监控多个IP摄像机的报警事件,接收者可以通过HTTP2.0推送请求接收实时的报警事件流。(这不是技术术语,我的服务从GET请求建立TCP/HTTP连接并保持打开,当摄像机触发警报事件时,照相机将其推回服务)
体系结构的层
适配器
Handler
港
服务
域
用户通过API向系统添加一个设备,请求包括所需的监视计划(当接收者应该每天启动和停止时)和url。
调度程序负责定期检查接收器是否打算根据其日程来启动。如果它是为某个设备运行的,它会为该设备启动一个接收器。
接收机建立与IP摄像机的连接,并在告警事件流上循环,处理告警事件并将它们传递给EventService。
EventService接收事件,并根据域逻辑负责处理事件,并决定发送电子邮件或忽略它。它还将所有事件保存到eventrepo。
代码的两个部分--我不知道它们在哪里--是调度程序和接收方。它们也应该是;a.都在同一包中,并放置在适配器层b. 适配器层中的接收器和服务层c中的调度程序c.服务层中的调度器和接收方
我只是感到困惑,因为接收方不是由用户直接启动的,而是由一个不断检查条件的运行循环启动的。但我也可能有不同的接收器为不同品牌的相机。这是一个实现细节,这意味着接收器应该在适配器层。这让我觉得选择b是最好的。
我可能想太多了,但是让我知道你们都认为最好的选择是或者建议一个更好的选择。
发布于 2021-08-18 09:12:23
如果它能帮助你,我的设计如下:
司机演员:
人类用户:使用驱动程序端口与应用程序交互:“用于添加devices"
驱动行为者:
device.
应用程序(“警报监视器”)执行以下业务逻辑:
devices").
所以对我来说:
这是一幅画:

发布于 2021-08-17 01:44:05
“调度程序负责定期检查接收机是否打算根据其时间表启动”。
最终,对于应用程序来说,不管是人为按下"autoStartReceivers“按钮,还是通过调度过程来完成它,都无关紧要。因此,这是一个基础设施问题,调度程序是一个驱动适配器。您可能会有一个由调度程序定期调用的ReceiverService.autoStartReceivers服务命令。
现在,对于Receiver,我想说它取决于实现。如果Receiver不知道特定于基础设施/供应商的细节,而只进行协调,那么它可能属于应用程序/服务层。
例如,接收方可能使用抽象的EventSource (HTTP、WebSockets等)。并使用特定于供应商的orchestration. ( EventDecoder )来调整事件,然后将它们中继到EventProcessor,然后它实际上只执行EventProcessor。EventSource & EventDecoder将是适配器。但是,如果Receiver知道具体的基础结构细节,那么它就成为一个适配器。
最后,所有这些都支持事件处理的核心领域的逻辑。核心域逻辑并不真正关心事件是如何捕获的,也可能也不关心结果是如何进行的。因此,它最简单的形式中的核心域可能是actions = process(event)纯函数。
发布于 2021-08-28 08:13:02
a.都在同一个包中,并放置在适配器层。
b.适配器层中的接收器和服务层中的调度程序
c.服务层中的调度程序和接收方?
接收器和调度器都是适配器。我不认为它们必须放在同一个包裹里,但你可以这样做。所以a是我最好的答案,因为.
接收器将你的应用程序连接到一个外部设备-- ip camara。因此,接收器是EventService端口的适配器。
调度程序通过DeviceService端口间接地管理接收方的生命周期。它启用或禁用ip camara,这将导致接收器的连接和断开。
从应用程序核心的角度来看,调度程序只是另一个适配器,它告诉DeviceService端口启用或禁用某些ip。这也可以由单击UI中的按钮的用户完成。调度程序只是对用户的一种技术帮助,它根据计划执行用户想要的任务。因此,调度程序也是一个适配器。
https://stackoverflow.com/questions/68789016
复制相似问题