首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GUI应用程序和单例/依赖项注入

GUI应用程序和单例/依赖项注入
EN

Stack Overflow用户
提问于 2010-07-30 19:04:21
回答 3查看 838关注 0票数 2

我正在使用wxWidgets开发一个使用GUI的应用程序。我得到了一个作为“模型”的对象:它的数据必须用于绘制ui,并且ui应该修改它。让我们把这个类称为Model

应用程序的结构如下所示:

一个wxApp-derived对象,它拥有:

  • a wxFrame-derived对象,它拥有wxGLCanvas-derived wxFrame-derived对象.

对于Model类,

  1. ,我可以使用一个使事情变得非常简单的单例:我可以在任何地方使用model.getThatData()model.setThatData()

然而,当人们说它是一个带花式服装的全局变量时,我也不会反对。

  • --我也可以使用依赖项注入(或者是其他的东西):我在wxApp对象中实例化Model,然后在两个wxFrame-derived类的构造函数中传递一个对实例model的引用,与wxGLCanvas构造函数的引用是一样的,我将引用存储为所需类的属性。

然而,这似乎也不是一个很好的解决方案。假设第一个wxFrame对象不需要使用model。但是,我们必须在构造函数中传递对model的引用,才能将其传递给wxGLCanvas-derived对象。因此,这种设计可能会导致许多(?)不必要的passings.

你觉得呢?我问自己这个问题已经很久了.

EN

回答 3

Stack Overflow用户

发布于 2010-07-30 23:01:41

然而,

,这似乎也不是一个很好的解决方案。假设第一个wxFrame对象不需要使用模型。但是,我们必须在其构造函数中传递对模型的引用,才能将其传递给wxGLCanvas派生的对象。因此,这种设计可能会导致许多(?)不必要的通行证。

与消除隐藏在实现中的类/对象之间的依赖关系的噩梦相比,传递指针是微不足道的(==单例)。

第二种是我的方式。目标是通过查看类声明来了解类的先决条件。理想情况下,如果在上下文中我拥有c‘to /init方法所需的一切,我应该能够实例化和使用对象。这样,生命周期也变得清晰起来:前提条件可能在释放对象之前不会被释放。

票数 2
EN

Stack Overflow用户

发布于 2010-07-31 00:06:37

框架是否依赖于特定的画布类?还是画布对象可以互换?

如果是后者,那么框架的构造函数应该通过对画布对象的引用来参数化。这样,应用程序将负责实例化模型,使用上述模型创建画布,并将画布传递给框架。框架不再直接依赖于模型。

如果框架依赖于特定的画布类(也就是说,框架实例化自己的画布,并知道它想要的画布类型)。然后,如果画布的构造函数依赖于model对象,则通过代理您的框架也依赖于模型。所以第二条是正确的。

票数 1
EN

Stack Overflow用户

发布于 2010-07-31 00:19:06

将其放入一个简单的MVC模型中。(请记住,C与M和V相互作用,M和V不相互作用。)

您的模型(显然)是MVC中的"M“。您的小部件是MVC中的"V“。

看到问题了吗?你试图把"M“给”V“,而忽略了"C”来代表一切。您的"C“可能是您的wxApp (这取决于您想要如何设计东西)。

换句话说,控制器应该将视图所需的数据从模型提供到视图;视图不应该直接从模型获取自己的数据。

(因此,在我看来,在MVC应用程序中,您的两项建议都是糟糕的选择。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3374578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档