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

标签 c++ design-patterns

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

似乎我经常需要设计一些程序来管理一些具有某种连接、解析阶段和抽象 View 的协议(protocol)。通常,我会尝试在设计程序时将关注点分离放在首位。

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

这种设计看起来真的很差,因为它增加了复杂性,而且每一层都必须有一个逐渐变大的构造函数等等。此外,由于连接通常使用 ASIO 之类的东西,回调通常在不同的线程上,因此很难推断线程安全性。

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

编辑

一个简单的例子

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

     void send(std::string);
     std::function<void(std::string)> on_receive;
};

我有几个这样的类,它们保存该层的状态,并通过它们的公共(public)成员函数和回调粘合在一起。

在此之上的层,接收网络的命令数据处理并调用basic_connection::send。并从 basic_connection 中获取原始数据,并将其转换为未处理的上层的命令。

编辑2:

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

最佳答案

如果没有一套要求,就很难推荐任何东西。但是,从您问题中的高级描述看来,您可能想要使用模型- View - Controller 模式,可能与其他模式一起使用。请记住,设计模式是您的 friend ,您是决定使用是否合适以及使用程度的人。设计模式很容易被滥用,而且一直在发生。

关于C++设计,如何用对象表示协议(protocol)的不同阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13220569/

相关文章:

python - 代码库应用更新机制设计

c++ - 在分离的设计层之间高效地传递通知

oop - FooManager 调用 Foo.OnSthHappened() 是一种不好的做法吗?

c++ - 从 2d char 数组 c++ 将字符串分配给 char 数组

c++ - 添加 resources.rc 文件信息项目

c++ - 没有匹配的函数可调用 'SDL_UpperBlit'

c# - 使用什么设计模式来验证数据和创建对象

c++ - 使用堆栈加密字符串

c++ - 使函数 primitve param const 如何导致编译器优化的好例子

c# - "using"构造和异常处理