我们有一个每5-10分钟运行一次的应用程序,应用程序的工作是使用最新数据来更新类Foo
对象的内存状态。
类状态可以表示为:
Class Foo {
int foo1;
double foo2;
bar foo3;
double foo4;
...
...
int fooN;
}
因此,对于此应用程序的n'th
运行,它获取了类bazObj(n)
的最新数据Baz
,Foo(n) = f(Foo(n-1), Baz(n))
这里棘手的是计算中存在很多相互依赖关系。例如,foo3
的计算取决于foo1
已更新,foo4
计算取决于foo2
和foo3
已更新等等。
我们当前的设计是一个简单的顺序流,隐含地具有所有这些依赖关系,这些依赖关系在任何地方都没有被捕获或强制执行,这使得代码难以维护。
构建Foo(n)
的计算以使代码流直观且易于理解/维护(使用C ++)的好方法是什么?任何指向相关设计模式的指针也会有所帮助。
答案 0 :(得分:1)
您的目标似乎是在计算每个对象所依赖的对象之后计算它们。听起来你在代码中手动执行此操作并发现它容易出错。
这是一个简单的方法。通过基于依赖性的排序可以大大改善它,但它将完成工作。
create a list of every object with a list of objects that it depends on
while (some objects are not computed)
for (each uncomputed object)
if (object's dependencies are met)
compute object
Mark as computed
执行此操作会使代码更简单,因为您可以简单地添加/修改对象及其直接依赖项,而无需担心在列表中添加它们的位置。上述算法将确保以正确的顺序计算它们。
这不是一个特别快的方法 - 它是蛮力,但很容易。它可以得到显着改善。
您可以记录计算对象的顺序,并在后续传递中重复使用(假设没有任何更改)。