这不是一个技术问题,而是一个 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;
};
我有几个像这样的类,它们保存该层的状态,并通过它们的公共成员函数和回调粘合在一起。
在此之上的层,接收网络的命令数据处理并调用basic_connection::send
. basic_connection
并从未经处理的上层获取原始数据并将其转换为命令。
编辑2:
我忘记提到的另一个问题是,您最终会通过堆栈转发某些接口,例如,顶层仍然需要知道连接状态。