1

我试图分解一个长的“主”程序,以便能够修改它,也可能对它进行单元测试。它使用了一些巨大的数据,所以我犹豫了:

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

(a) 按价值计算,或

(b) 通过引用

(非常大,我的意思是一些结构和小类的向量的映射和向量......甚至图像......可能真的很大)

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

我的问题虽然与优化有关,但当我试图将这个怪物分解成小怪物时,我也不想耗尽内存。

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

有人可以解释一下吗?

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

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

哪个更好 ?

4

2 回答 2

2

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

因此,您必须考虑每个函数,并准确定义它在数据的哪一部分上起作用。至于函数参数和返回值,很简单:小对象传值,大对象传引用。

您可以对分隔大小的阈值使用猜测值。我使用“8 小,任何东西都大”的规则,但对我的系统有益的东西不能对你的系统同样有益。

于 2013-03-19T01:18:58.457 回答
1

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

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

于 2013-03-19T00:31:45.627 回答