如何有效地为树形结构对象数据模型分离模型和视图?

时间:2015-09-05 16:30:47

标签: c++ design-patterns model-view-controller mfc

我正在使用MVC模式开发MFC应用程序。我使用MFC Dialog类作为控制器和模型的模型类,一个视图类将模型类保存为视图的成员。模型中的数据以树形结构组织,如下图所示:

<http://i.stack.imgur.com/4FOJt.png>.

在图中,大写字母代表一个类名,因此模型中的数据是一个对象树,每个对象包含许多数据成员,包括对子对象的引用,如子指针对象或子对象数组

但问题是,当视图在UI上显示或更新模型中的数据时,需要访问每个级别上每个节点对象的数据成员,这需要包括那些节点对象的头文件,以便检索他们的数据成员。因此,在View类的cpp文件中绘制UI的方法如下所示:

#include "B.h"
#include "C.h"
#include "D.h"
#include "E.h"
#include "F.h"
#include "G.h"
void View::Draw(CDC *pDC)
{
      A a= Model.A; 
      B b1=A.b1; 
      B b2=A.b2;
      for (int i=0; i<b1.arrayofC.size; i++)
      {
           C c=b1.arrayofC[i];
           int length=c.getlength();
           int j=c.arrayofD.size;
           while (j>0)
           {
              D d=c.arrayofD[j];
              CString Name=d.Name;
              ...
              j--;
           }
           ....
      }
      for (int i=0; i<b2.arrayofC.size;i++)
      {
           C c=b2.arrayofC[i];
           double start=c.start;
           double end=c.end;
           int j=c.arrayofD.size;
           while (j>0)
           {
              D d=c.arrayofD[j];
              CString Name=d.Name;
              ...
              j--;
           }
           ....
      }
}

这使得代码非常混乱,很明显模型和视图之间存在紧密耦合。如何使它们彼此高度独立,以确保我的应用程序的可维护性或可伸缩性。

0 个答案:

没有答案