单文档项目结构

时间:2009-05-11 17:37:00

标签: mfc

我之前曾询问过访问项目中存在的成员变量的正确方法。在项目中,我有CWinapp派生类,CMainFrm类,不同视图类的列表。但是,目前,我在CWinApp派生类中实例化了不同的用户定义类的实例,而其余类使用从AfxGetApp()函数获取的指针,然后访问不同的用户定义类。 MFC新闻组的一些社区成员告诉我这是一个非常糟糕的设计(即父母不应该对app-class,view class或document class有任何了解)。但是,我不确定如何在不使用此设计的情况下访问各种用户定义的类。听到一些建议会很棒,因为我对MFC不够熟悉,无法提出合适的搜索条件。

1 个答案:

答案 0 :(得分:0)

“(即父母不应该对app-class,view class或document class一无所知)”

我不确定我理解这句话,你在这里对'父母'是什么意思?

无论如何,在我看来,你描述的设计并不是一个真正的问题。这是一个权衡:您是将这些类传递给所有需要它们的函数,使它们的使用和API复杂化,还是将它们存储为像您一样的全局变量?这取决于访问的数据以及访问频率。许多地方所需的数据也可以是“全球性的”。

有多种方法可以使数据“全局化”:使其成为CWinApp(即您的CWinApp派生类)或CMainFrame的成员,或者您制作实际的“全局变量”,还是制作单身,...

全局变量的问题在于,很难确定谁在何时何地访问它。如果您作为CWinApp的成员进行数据,则可以通过访问器函数访问它并从那里跟踪访问(通过日志消息,断点,......)在我看来,这减轻了与全局变量相关的大多数问题。我现在通常做的就是使用Loki单身人士。

你的帖子中没有说明数据是CWinApp成员的原因,作为一个解耦问题,是(在你提出它的背景下)有点奇怪的imo。如果某些类需要访问,他们无论如何都需要知道这些数据结构,并且它们的存储位置是无关紧要的。也许这只是因为我不知道你设计的具体细节。