c++接口设计- IO板底层协议
C++ interface design - IO board lowlevel protocol
我有一个c++类实现io板的低级接口(串行协议),该协议有两个命令来请求板状态(0x01和0x02),并在相同的答案中返回不同的值,如温度和io/状态。第一个命令返回temperature1和gpio 1和2,第二个命令返回temperature2和gpio 3和4。理想情况下,该类的消费者将不知道任何关于内部实现或板协议,所以我要实现底层接口,如
public:
int getTemperature1();
bool getSwitch1();
bool getSwitch2();
int getTemperature2();
bool getSwitch3();
bool getSwitch4();
,消费者会这样使用它:
board->getTemperature1(); //send command 0x01
board->getSwitch1();//send command 0x01
...
board->getTemperature2();//send command 0x02
board->getSwitch3();//send command 0x02
我看到的问题是所有这些命令在串行接口上触发相同的命令,但我不希望这种情况发生,因为它减慢了应用程序,似乎相当低效。到目前为止,我的解决方案是在底层类中添加updateStatus1()和updateStatus2()方法,并使消费者在读取任何值之前调用此方法:
board->updateStatus1();//send command 0x01
board->getTemperature1();
board->getSwitch1();
...
board->updateStatus2();//send command 0x02
board->getTemperature2();
board->getSwitch3();
当然,消费者必须记住,在调用getTemperature1()和getSwitch1()之前,必须调用updateStatus1(), updateStatus2()也是如此。换句话说,消费者必须知道底层接口的内部实现,如果它不记得调用updateStatus方法,可以在不知道错误的情况下读取过时的值。
所以我想问一下,是否有人能想出一个更好的设计,使消费者更容易出错,并使底层类更有效。
也许你可以声明一个BoardStatus
结构体,定义一个GetBoardStatus
函数返回这个BoardStatus
结构体。
在GetBoardStatus
功能中,您可以合并所有逻辑并检查实际单板状态是否发生了变化。如果实际的董事会状态没有改变,你可以返回它的现金副本,如果它已经改变了,你将在返回之前重新计算它。
这种方式转移了服务器端更新状态的所有责任。
相关文章:
- Seg Fault Issue C++ (file IO / getline)
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 为什么在读取文件大小时文件IO速度会发生变化
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 如何使用url确定网站协议
- MSYS2 MinGW程序包中缺少grpc_cpp_plugin协议
- 用CMake构建C++协议
- Agora.io 虚幻引擎插件构建错误
- 从原始字节解码协议缓冲区(以 C++为单位)
- 不将数据 socket.io c++(客户端)发送到 nodejs(服务器)socket.io
- ASIO signal_set多个 IO 线程不可靠,具体取决于代码顺序?
- 通过 Tor 服务C++ socket.io 客户端
- 如何使用可视化代码和平台IO将环境变量注入CPP文件?
- 如何读取 google::p rotobuf::io::CodedOutputStream::WriteVarint32
- Conan.io 在编译步骤中或已经在签出时
- C++中真正的异步文件 IO
- 如何使用ZeroMQ为协议缓冲区编写自己的RPC实现
- 协议缓冲区字符串字段的文本编码
- Google协议缓冲区,在提供的流对象中向后重新定位IO头
- c++接口设计- IO板底层协议