首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++接口设计-- IO板卡底层协议

C++接口设计-- IO板卡底层协议
EN

Stack Overflow用户
提问于 2016-09-29 15:52:30
回答 1查看 100关注 1票数 0

我有一个实现IO板的低级接口(串行协议)的C++类,该协议有两个命令来请求板状态(0x01和0x02),并在相同的答案中返回不同的值,如温度和io /状态。第一个命令返回temperature1和GPIO1和2,第二个命令返回temperature2和GPIO3和4。理想情况下,该类的使用者不会知道任何关于内部实现或板协议的信息,因此我将实现如下所示的低级接口

代码语言:javascript
复制
public:    
    int getTemperature1();
    bool getSwitch1();
    bool getSwitch2();

    int getTemperature2();
    bool getSwitch3();
    bool getSwitch4();

消费者将以这种方式使用它:

代码语言:javascript
复制
board->getTemperature1(); //send command 0x01
board->getSwitch1();//send command 0x01

...

board->getTemperature2();//send command 0x02
board->getSwitch3();//send command 0x02

我看到的问题是,所有这些命令都会在串行接口上触发相同的命令,但我不希望这种情况发生,因为它会减慢应用程序的运行速度,而且看起来效率很低。到目前为止,我的解决方案是在低级类中添加一个方法updateStatus1()和updateStatus2(),并让使用者在读取任何值之前调用该方法:

代码语言:javascript
复制
board->updateStatus1();//send command 0x01
board->getTemperature1(); 
board->getSwitch1();

...
board->updateStatus2();//send command 0x02
board->getTemperature2();
board->getSwitch3();

当然,消费者必须记住,在调用getTemperature1()和getSwitch1()之前,必须调用updateStatus1(),对于updateStatus2()也是如此。换句话说,使用者必须知道低级接口的内部实现,如果不记得调用updateStatus,方法就可以读取陈旧的值,而不会意识到错误。

所以我在问,是否有人想出了一个更好的设计,让消费者不那么容易出错,并让低级类更有效率。

EN

回答 1

Stack Overflow用户

发布于 2016-09-29 16:19:33

也许你可以声明一个BoardStatus结构,定义一个返回这个BoardStatus结构的GetBoardStatus函数。

GetBoardStatus函数中,您可以合并所有逻辑并检查实际的电路板状态是否已更改。如果实际的板状态没有改变,你可以返回它的现金副本,如果它已经改变,你将在返回它之前重新计算它。

这种方式将所有状态更新的责任转移到服务器端。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39764436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档