gpt4 book ai didi

c++ - 我应该如何拆分测试值?

转载 作者:行者123 更新时间:2023-11-28 04:18:47 25 4
gpt4 key购买 nike

我目前正在使用 Qt/C++ 开发一个程序,该程序将分析和测试从名为“Phabrix SxE”的设备接收到的不同值。根据我们正在测试的产品,这些值会有不同的限制。

我的第一个想法是创建一个名为“TestLimits”的类,其中包含我们将测试的所有值的私有(private)变量。然后这个类将在名为“TestConfiguration”的类中使用(除了“TestLimits”类之外,该类还将保存有关 Phabrix 设备的 IP 地址、端口和名称的信息)。

TestConfiguration (name, ip, port, limits);

如果我使用此策略,我需要为 TestLimits 类中的每个私有(private)成员值 使用 getter 和 setter。我不是 getter/setter 的忠实粉丝,只是因为它们破坏了封装。如果我只使用“TestConfiguration”类并在构造函数参数中声明所有限制...

TestConfiguration (name, ip, port, limit1, limit2, limit3, ..., ...);

...它会很快变得困惑。

在创建这样的东西时,如何避免使用 getter、setter 和又长又乱的构造函数?即使我使用“TestLimit”,我也需要像这样声明它们......

TestLimit(limit1, limit2, limit3, ..., ..., ...);

... 这仍然很困惑。如果我需要为其中一个测试添加新值怎么办?在那种情况下,我需要编辑使用 TestLimit 构造函数的每一行。

有人做过类似的事情,可以给我一些提示吗?

谢谢!

最佳答案

针对您的情况的最佳答案取决于软件其余部分的设计目标。我将用来指导设计选择的一些示例问题:

  • 有多少限制,它们都是相同的数据类型还是不同?
  • 如何调用它们?也就是说,它们的字面意思是“极限 1、极限 2……”还是“最大电压、最大电流……?”
  • 限制的数量或布局是否经常变化?这是现在很小的东西,但可能会随着程序的发展而扩展吗?
  • 软件如何了解限制是什么?它们是来自配置文件、用户对话框、硬编码还是其他?

以下是一些可能最适合或不适合您的特定情况的可能性。


选项 1:普通旧结构

如果问题是样板 getter 和 setter 的错误封装,也许最好摆脱它们:

struct TestLimits {
voltage max_voltage;
current max_current;
limit limit3;
};

这允许您在源代码中通过有意义的名称引用每个限制,并且消除了任何繁琐的构造函数、getter 和 setter 代码。以后可能更难使限制变得更复杂。例如,如果稍后将新测试添加到软件中,那么 max_voltage 现在是 test_time 的函数,那么触及 TestLimits 的所有内容都必须更改。

选项 2:只有 getter 来保留封装

假设测试限制是通过一些密集操作一次性计算出来的,例如读取配置文件或查询测试设备。我经常以这样的模式结束:

class TestLimitsFinder {
public:
TestLimitsFinder();

void find_all_the_limits();

const voltage& max_voltage() const;
const current& max_current() const;
limit limit3() const;

private:
voltage max_voltage_;
current max_current_;
limit limit3_;
};

这个系统提供了一些封装。设置限制的唯一方法是通过 find_all_the_limits() 方法。它消除了样板构造函数和 setter ,但没有消除 setter/getter 。如果有许多对象消耗限制,但只有一个或几个产生限制,则可以将 getter 方法作为抽象的 ITestLimits 接口(interface)提供。那么所有的限制消费者都不知道软件是如何找到他们的。这部分实现可以完全改变,而无需改变所有用户。

选项 3:QProperty

Qt 有一个 property system这对于可参数化的对象非常有用。如果您使用 QProperties,生成对话框以获取属性/限制变得非常容易,并且还有一个 XML 序列化系统等等。属性在是否编写自定义 getter、setter 和通知信号方面具有很大的灵 active 。也可以在运行时动态添加或修改对象的属性。

另一方面,TestLimits容器必须派生自QObject,它引入了元对象编译器。这将深度 Qt 依赖项引入到限制代码中,这可能不合适。

关于c++ - 我应该如何拆分测试值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55961413/

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