如何在很多相互依赖的状态下使用设计模式?

时间:2014-11-16 23:22:21

标签: c++ oop design-patterns class-design

我们有一个每5-10分钟运行一次的应用程序,应用程序的工作是使用最新数据来更新类Foo对象的内存状态。 类状态可以表示为:

Class Foo {
 int foo1;
 double foo2;
 bar foo3;
 double foo4;
 ...
 ...
 int fooN;
}

因此,对于此应用程序的n'th运行,它获取了类bazObj(n)的最新数据BazFoo(n) = f(Foo(n-1), Baz(n)) 这里棘手的是计算中存在很多相互依赖关系。例如,foo3的计算取决于foo1已更新,foo4计算取决于foo2foo3已更新等等。

我们当前的设计是一个简单的顺序流,隐含地具有所有这些依赖关系,这些依赖关系在任何地方都没有被捕获或强制执行,这使得代码难以维护。

构建Foo(n)的计算以使代码流直观且易于理解/维护(使用C ++)的好方法是什么?任何指向相关设计模式的指针也会有所帮助。

1 个答案:

答案 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

执行此操作会使代码更简单,因为您可以简单地添加/修改对象及其直接依赖项,而无需担心在列表中添加它们的位置。上述算法将确保以正确的顺序计算它们。

这不是一个特别快的方法 - 它是蛮力,但很容易。它可以得到显着改善。

您可以记录计算对象的顺序,并在后续传递中重复使用(假设没有任何更改)。