可以说我有分布式架构(客户端-服务器)。在客户端有ServerEntity类,在客户端有它的ClientEntity类。我希望ClientEntity只是从ServerEntity请求一些数据。我最近开始学习 DDD 方法,实际上我喜欢领域事件,所以我选择了它。这是我对未来实施的简化期望:
- ClientEntity 创建命令 RequestDataCommand 并发布它(例如通过 MessageBus)
- 客户端的 ApplicationLayer 获取此命令,将其连接起来并发送到服务器
- Server 的 ApplicationLayer 接收命令并将命令推送到 MessageBus
- ServerEntity 接收命令并发布带有一些数据的域事件
- 服务器的 ApplicationLayer 获取此事件,连接它并发送到客户端
- 客户端的 ApplicationLayer 接收事件并将命令推送到 DomainEventManager
- ClientEntity 订阅了该事件,当接收到它时,它会更改一些内部状态。
上述方法的缺点是我们最终会得到几十个命令类。
另一方面,还有另一种选择:我们创建一些域服务接口,如 IRequestDataService,并将其作为 ClientEntity 的依赖项。因此我们不需要创建命令类并将其传递给消息总线,我们只需从 IRequestDataService 调用适当的方法。来自服务器的响应作为域事件被接收,就像前面的例子一样。
第二种方法的缺点是我们使用服务只是发送命令,在我看来应该只执行同步操作。
哪种方法更好,我认为客户端-服务器通信的正确方法是什么?