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

时间:2014-04-03 19:23:49

标签: c++ design-patterns

我(尝试)在C ++中设计通信协议,并希望抽象出协议的各个层,以便将来可以在不需要更改整个应用程序的情况下进行更改。

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

  1. 申请---例如。气候> SetTemperature(70);
  2. 模块(例如气候)---例如。 protocol-> SetRegister(23,70);
  3. 协议层---例如。 msg [] = {0x4C,0x55​​,0x17,0x46}; comm->命令sendpacket(MSG);
  4. 通讯层
  5. 问题出现在返回路径上:

    1. 通讯层
    2. 协议层
    3. 模块
    4. 应用
    5. 我真的不希望应用程序不断地向模块询问数据,然后是模块询问协议,以及询问通信层的协议,但是每个类中的回调都是"冒泡& #34;数据似乎很乱。但一般情况下,只有通信层才能知道是否有值得进一步处理的数据(通过协议层等)

      有更好的设计模式吗?

1 个答案:

答案 0 :(得分:1)

您可能没有进行同步通信,所以您不能等到通信层有答案。

我们所拥有的是Application-> Module-> Protocol-> Communication。这一切都是发送方(除了来自各层的任何重试等)。

您没有说明数据是如何实际收集的,在您将其告知消息/事件系统在应用程序中之前,通信层可能不会知道任何数据。因此,您无论如何都需要调用它,并且应用程序了解模块和所有通信层似乎是错误的。

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