C++设计,如何用对象表示协议的不同阶段

111*_*111 13 c++ design-patterns

这不是一个技术问题,而是一个c ++设计问题.

通常,似乎我必须设计程序,必须管理一些具有某种连接的协议,解析阶段和抽象视图.通常情况下,我会尝试将我的程序设计为最前沿的关注点.

我一直以对象的"堆栈"结束,系统位于解析器的顶部,而解析器又位于连接的顶部(通常有更多的层).然后,这些对象使用成员函数调用来调用它下面的层(Tx),并使用回调(std::function通常)来捕获来自其他方向(Rx)的信息.

这种设计似乎非常低,因为它增加了复杂性,每层都必须有一个逐渐变大的构造函数等等.另外因为连接通常使用类似ASIO的东西,回调通常在不同的线程上,因此很难推断线程安全.

是否有更好的设计模式或成语代表这种结构/功能?

编辑

一个简单的例子

class basic_connection {
     basic_connection(std::string address);

     void send(std::string);
     std::function<void(std::string)> on_receive;
};
Run Code Online (Sandbox Code Playgroud)

我有一些像这样的类,它拥有该层的状态,并通过它们的公共成员函数和回调粘合在一起.

上面的层接收网络和调用的命令数据进程basic_connection::send.并从原始数据中获取原始数据basic_connection并转换为未处理的上层图层的命令.

EDIT2:

我忘了提到的另一个问题是你最终通过堆栈转发了一些接口,例如,顶层仍然需要知道连接状态.

Som*_*ame 1

如果没有一套要求,就很难推荐任何东西。但是,从您问题中的高级描述来看,您似乎可能想要使用模型-视图-控制器模式,也许与其他模式结合使用。请记住,设计模式是您的朋友,您可以决定使用是否合适以及使用到什么程度。设计模式很容易被滥用,而且这种情况一直在发生。