我有一个实现IO板的低级接口(串行协议)的C++类,该协议有两个命令来请求板状态(0x01和0x02),并在相同的答案中返回不同的值,如温度和io /状态。第一个命令返回temperature1和GPIO1和2,第二个命令返回temperature2和GPIO3和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,方法就可以读取陈旧的值,而不会意识到错误。
所以我在问,是否有人想出了一个更好的设计,让消费者不那么容易出错,并让低级类更有效率。
发布于 2016-09-29 16:19:33
也许你可以声明一个BoardStatus结构,定义一个返回这个BoardStatus结构的GetBoardStatus函数。
在GetBoardStatus函数中,您可以合并所有逻辑并检查实际的电路板状态是否已更改。如果实际的板状态没有改变,你可以返回它的现金副本,如果它已经改变,你将在返回它之前重新计算它。
这种方式将所有状态更新的责任转移到服务器端。
https://stackoverflow.com/questions/39764436
复制相似问题