管理到聚合中外部组件的连接

问题描述

我刚刚发现了Axon框架,并且非常渴望使用它,因为它回答了我对DDD的许多疑问和担忧。 我要在其上使用的第一个项目包含小型摄像机,这些摄像机通过GigEVision协议(通过TCP和UDP用于控制和流通道)进行控制。我认为在我们维持与外部组件的连接的任何情况下,或更普遍地说,我们希望将外部组件的生命周期链接到Axon的生命周期,都是我的问题。

我想要一个名为Camera的聚合,可以向其发送Command来捕获1张图像或以某个FPS开始捕获N张图像。

我不确定的是如何管理与Aggregate中外部组件的连接。

- Should I inject the client to my camera in my Camera Aggregate and consider connecting to it as part of my protocol / business commands? In this case how would I link the camera lifecycle (a camera get disconnected all of a sudden) to the aggregate lifecyle (create a corresponding CameradisconnectedEvent)?
- Should the connection be handled in a side car Saga which get the camera client injected,the saga starting on ConnectionRequestedEvent and stopping as soon as we get a connection error from the camera. I would get the same issue of linking the connection lifecycle to the lifecycle of the Saga I think.
- Am I leaking implementation details in the business layer and should manage the issue an other way?
- Am I just using the wrong tool for this job and should not try to force it into Axon?

非常感谢您,希望我的信息和问题有意义。

最诚挚的问候,

解决方法

首先,您应该做的是确保GigEVision协议所讲的语言绝不过渡到您的其他域。 这两个应该分开并保持这样,因为它们涵盖了不同的关注点。

这表明必须具有某种翻译层。 更正式地称为上下文映射。从DDD的角度来看,您可以通过谈论反腐败层来进一步发展。 顾名思义,您添加了一层以确保您不会破坏来自另一个域的域逻辑。 在这里可以阅读的另一个有用的主题是“绑定上下文”的概念。 不过,我要离题了,让我们回到当前的问题:将这个反腐败层放置在哪里。

我目前不清楚,是什么域要求,为什么要求在请求图像时始终保持连接的原因。 您要发送的命令是否要求提供实时供稿?还是只是给定时间范围内的“一些”图像? 在这两种情况下,我都不会立即确信这些操作中的任何一项都需要通过单个Camera聚合来进行验证,说实话。

您仍然可以以命令和事件格式对此进行建模,因为消息传递范例对于完全分离关注点非常有帮助。 但是鉴于当前的描述,我不确定您是否需要DDD的聚合概念来建模单个聚合。 在此说明中,我可能是错的,但在此阶段,我对您的域名还不够了解。

这是我的情况两分钱,希望这对您有帮助!