我正在使用wxWidgets开发一个使用GUI的应用程序。我得到了一个作为“模型”的对象:它的数据必须用于绘制ui,并且ui应该修改它。让我们把这个类称为Model。
应用程序的结构如下所示:
一个wxApp-derived对象,它拥有:
wxFrame-derived对象,它拥有wxGLCanvas-derived wxFrame-derived对象.对于Model类,
,
model.getThatData()或model.setThatData()。然而,当人们说它是一个带花式服装的全局变量时,我也不会反对。
wxApp对象中实例化Model,然后在两个wxFrame-derived类的构造函数中传递一个对实例model的引用,与wxGLCanvas构造函数的引用是一样的,我将引用存储为所需类的属性。然而,这似乎也不是一个很好的解决方案。假设第一个wxFrame对象不需要使用model。但是,我们必须在构造函数中传递对model的引用,才能将其传递给wxGLCanvas-derived对象。因此,这种设计可能会导致许多(?)不必要的passings.
你觉得呢?我问自己这个问题已经很久了.
发布于 2010-07-30 23:01:41
然而,
,这似乎也不是一个很好的解决方案。假设第一个wxFrame对象不需要使用模型。但是,我们必须在其构造函数中传递对模型的引用,才能将其传递给wxGLCanvas派生的对象。因此,这种设计可能会导致许多(?)不必要的通行证。
与消除隐藏在实现中的类/对象之间的依赖关系的噩梦相比,传递指针是微不足道的(==单例)。
第二种是我的方式。目标是通过查看类声明来了解类的先决条件。理想情况下,如果在上下文中我拥有c‘to /init方法所需的一切,我应该能够实例化和使用对象。这样,生命周期也变得清晰起来:前提条件可能在释放对象之前不会被释放。
发布于 2010-07-31 00:06:37
框架是否依赖于特定的画布类?还是画布对象可以互换?
如果是后者,那么框架的构造函数应该通过对画布对象的引用来参数化。这样,应用程序将负责实例化模型,使用上述模型创建画布,并将画布传递给框架。框架不再直接依赖于模型。
如果框架依赖于特定的画布类(也就是说,框架实例化自己的画布,并知道它想要的画布类型)。然后,如果画布的构造函数依赖于model对象,则通过代理您的框架也依赖于模型。所以第二条是正确的。
发布于 2010-07-31 00:19:06
将其放入一个简单的MVC模型中。(请记住,C与M和V相互作用,M和V不相互作用。)
您的模型(显然)是MVC中的"M“。您的小部件是MVC中的"V“。
看到问题了吗?你试图把"M“给”V“,而忽略了"C”来代表一切。您的"C“可能是您的wxApp (这取决于您想要如何设计东西)。
换句话说,控制器应该将视图所需的数据从模型提供到视图;视图不应该直接从模型获取自己的数据。
(因此,在我看来,在MVC应用程序中,您的两项建议都是糟糕的选择。)
https://stackoverflow.com/questions/3374578
复制相似问题