gpt4 book ai didi

c++ - 如何在不增加其他地方的复杂性的情况下降低库中的复杂性?

转载 作者:搜寻专家 更新时间:2023-10-31 01:22:54 25 4
gpt4 key购买 nike

我的任务是维护和更新一个库,该库允许计算机向硬件设备发送命令,然后接收其响应。目前代码的设置方式是设备可以接收的每一个可能的命令都是通过它自己的函数发送的。代码重复无处不在; DRY 提倡者最糟糕的噩梦。

显然有很多改进的机会。问题是每个命令都有不同的有效负载。目前,要成为有效载荷的数据以参数的形式传递给每个命令函数。如果不将复杂性推到调用库的级别,就很难整合功能。

当从设备接收到响应时,它的数据被放入一个单独负责保存该数据的类的对象中,它们什么都不做。有数百个类可以执行此操作。然后,应用层使用这些对象访问返回的数据。

我的目标:

彻底减少代码重复

在应用层保持相似的复杂度

让添加新命令变得更容易

我的想法:

有一个发送命令的函数和一个接收命令的函数(当检测到来自设备的响应时自动调用接收函数)。有一个包含所有命令/响应数据的结构,这些数据将传递给发送函数并由接收函数返回。由于每个命令都有相应的枚举值,因此有一个 switch 语句来设置要发送的任何命令特定数据。

我的想法是最好的实现方式吗?我可以在这里使用设计模式吗?我看了又看,但似乎没有什么能满足我的需求。

提前致谢! (如果需要澄清,请告诉我)

最佳答案

这让我想起了 REST 与 SOA 的辩论,尽管是在较小的物理规模上。

如果我没理解错的话,现在你有这样的电话

device->DoThing();
device->DoOtherThing();

然后有时我会收到这样的回调

callback->DoneThing(ThingResult&);
callback->DoneOtherTHing(OtherThingResult&)

我建议用户是这里的关键组成部分。当前的图书馆用户是否喜欢设计的界面?接口(interface)是否一致,即使它很大?

你好像想求婚

device->Do(ThingAndOtherThingParameters&)
callback->Done(ThingAndOtherThingResult&)

所以要有一个单一的入口点来处理更复杂的数据。

从图书馆用户的角度来看,缺点是可能,现在我必须使用手动 switch() 或其他类型的语句来告诉真正发生了什么。虽然派发到适当的结果回调过去是为我完成的,但现在你已经把它变成了库用户的负担。

除非这为我作为用户带来了一定程度的灵 active ,我作为用户 想要,否则我会认为这是倒退。

对于作为实现者的您来说,一个建议是在内部使用通用形式,然后在外部提供两种接口(interface)。也许旧的特定界面甚至可以以某种方式自动生成。

祝你好运。

关于c++ - 如何在不增加其他地方的复杂性的情况下降低库中的复杂性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2327498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com