C++循环类成员资格中的协议设计

Protocol design in C++, cyclic class membership

本文关键字:协议 循环类 成员 C++      更新时间:2023-10-16

我正在(尝试)用C++设计一个通信协议,并希望抽象出协议的各个层,以便将来可以在需要时更改它们,而无需更改整个应用程序。

到目前为止,我已经设计了这个:

  1. 应用---例如气候>设定温度(70);
  2. 模块(例如。气候)---例如。protocol->SetRegister(23, 70);
  3. 协议层--- eg.msg[] = {0x4C, 0x55, 0x17, 0x46};comm->SendPacket(msg);
  4. 通信层

返回路径上出现问题:

  1. 通信层
  2. 协议层
  3. 模块
  4. 应用

我真的不希望应用程序不断地向模块询问数据,然后模块询问协议,协议询问通信层,但是每个类中的回调来"冒泡"数据似乎很混乱。一般来说,只有通信层知道是否有任何值得进一步处理的数据(通过协议层等)

有没有更好的设计模式?

很可能

您没有进行同步通信,因此您不能等到通信层获得答案。

所以我们拥有的是应用程序>模块>协议>通信。这一切都是为了传输端(除了来自各个层的任何重试等)。

没有说数据实际上是如何收集的,通信层很可能不知道任何数据,直到您告诉它消息/事件系统在应用程序中。所以无论如何你都需要调用它,应用程序同时知道模块和所有通信层似乎是错误的。

因此,将收集到的数据传递给模块,并让它们沿着链传递,如果数据有意义,它最终会到达顶层。应用程序应"订阅"来自模块的事件以获取所需的数据(事件和观察器)。通信层之间不需要订阅,因为无论如何您都会调用它们来为他们提供工作,因此它们可以简单地返回处理结果。