同时优化和可测试性 - 如何将代码分解为更小的单元

时间:2013-03-19 00:26:51

标签: c++ class function optimization

我正试图打破一个漫长的"主要"程序,以便能够修改它,也可能对它进行单元测试。它使用了一些巨大的数据,所以我犹豫了:

什么是最好的:进行函数调用,可能会传递非常大的(内存方式)数据,

(a)按价值或

(b)参考

(非常大,我指的是一些结构和小类的矢量的地图和矢量......甚至图像......可能非常大)

(c)或者拥有所有功能都可以访问的私人数据?这也可能意味着main_processing()或者其他东西可以包含所有这些的向量,而某些函数只有一个项目......具有可测试函数的优点。

我的问题虽然与优化有关,但我试图将这个怪物打破成宝贝怪物,我也不想耗尽内存。

如果我创建局部变量,我不清楚我将拥有多少份数据副本。

有人可以解释一下吗?

编辑:这不是一般的"如何将一个非常大的程序分解为类"。该程序是大型解决方案的一部分,已经分解为小型实体。

我正在查看的可执行文件虽然相当大,但却是一个单独的实体,具有不可分割的数据。因此,数据将全部创建为单个类中的成员变量,我已经创建了它,或者它将(所有这些)作为参数围绕函数传递。

哪个更好?

2 个答案:

答案 0 :(得分:2)

如果您想进行单元测试,则不能“拥有所有功能都可以访问的私有数据”,因为这样,所有这些数据都将成为每个测试用例的一部分。

因此,您必须考虑每个函数,并准确定义它工作的数据部分。至于函数参数和返回值,它非常简单:对小对象使用pass-by-value,对大对象使用pass-by-reference。

您可以将猜测用于分隔小型和大型的阈值。我使用规则“8很小,任何更大的规则”,但对我的系统有益的是对你的同样好。

答案 1 :(得分:1)

这似乎更像是关于OOP的一般性问题。将数据拆分为逻辑分组的概念(类),并将与这些数据元素一起使用的代码与数据(成员函数)放在一起,然后将它们与组合,继承等结合在一起。

您的问题太广泛,无法提供更具体的建议。