公共对象如何放置?
我在写一个MFC多文档界面程序。
我为我的程序构造了几个公共类:
class helper1;
class helper2;
...
class helper3;
在程序的每个View、Doc等等都需要调用这几个类的方法,所以对于这个程序来说,我只需要对上面的类实例化一次就够了。
现在的问题出来了,实例化的对象该放置在哪里比较合适呢?
我的同事的建议是都放到App类里面,做为成员存在,而且有些成员是以指针的形式存在的。使用的时候有两种方法:
1、AfxGetApp()->pHelper1->Method1();//直接把成员指针做为公共成员,然后调用,优点是简单,但是直接暴露指针给外部,有可能造成危险。
2、AfxGetApp()->Method1();//在App中添加新的方法,然后调用自己的指针完成操作,优点是保护了指针,缺点是让App类增加了无数接口。
我认为,这几个类彼此互不相干,都丢到App里面有些不合适,程序的结构也越来越混乱。
我的一个解决方法是声明几个全局对象,可是全局对象又好象不妥,小组成员都非常害怕全局对象这种使用方法。
请问大家有没有更好的方式组织程序?让程序的结构清晰,访问简单。
问题点数:100、回复次数:13Top
1 楼ross33123()回复于 2003-12-03 03:57:44 得分 50
我认为
放到 App 对象里和作为全局变量只是看上去不同,放到 App 里只是看起来更加 OO 一点,所以下面讨论不区分两者。
如果对象里只有方法,没有数据,或者说是无状态的,那么用全局变量完全没问题。
其实如果不在意表面的话,只有方法的类还不如直接写作全局的函数。
如果这些 Helper 对象是有状态的,那么可能应该在需要的时候动态创建,而不是声明一个全局变量了事。
Top
2 楼canjian(奋斗,探求,不达目的誓不罢休!)回复于 2003-12-03 08:12:08 得分 0
有过类似问题,关注Top
3 楼HanZhu1(寒竹)回复于 2003-12-03 09:22:00 得分 10
我感觉还是把需要共享的class放在app里,然后在需要用的文件头加上
extern class helper1; 这样app的指针就不会共享,而只有这个类的对象是共享的Top
4 楼maquanwei(深爱编程)回复于 2003-12-03 09:22:51 得分 0
提前,希望更多的朋友帮我一下,谢谢Top
5 楼wangweixing2000(星(inspiration(灵感)))回复于 2003-12-03 10:12:17 得分 15
这个很好办了,给这几个类都加上一个字的命名空间就可以了!eg:
namespace your_name
{
....
}
你每一个类的.h和.cpp都用这个包起来!用的时候也很简单eg:
头文件肯定是要include进去的
然后用 your_name::helper1::....就可以了,这样不必担心那些问题了,哈哈!Top
6 楼maquanwei(深爱编程)回复于 2003-12-04 19:07:25 得分 0
名字空间,也是一个办法……Top
7 楼checkyvc6(已所不欲,勿施于人)回复于 2003-12-04 19:38:27 得分 0
有意思的问题,可以多多讨论
我个人认为:ross33123() 的看法和我差不多,其实全局变量不是那么的可怕,毕竟mfc 本省也用到了不少的全局变量benTop
8 楼maquanwei(深爱编程)回复于 2003-12-04 20:35:52 得分 0
是啊,对于整个程序都要访问的对象,究竟怎样防治才算是合理,更安全呢?
尤其是,有些对象,它的初始化需要用到程序其他地方的数据,这样作为全局变量就非常麻烦了。Top
9 楼ahao(天·狼·星星)回复于 2003-12-04 21:16:10 得分 15
用全局变量,或者singlton,但最好是加一个辅助类,控制生命期。
Top
10 楼maquanwei(深爱编程)回复于 2003-12-11 23:33:54 得分 0
非常感谢大家。
很快我所在的项目组就要决定如何放置这些公共对象了,到时候我会回来告诉大家我们的选择。
同时欢迎大家继续提出各种意见。Top
11 楼lye(laye)回复于 2003-12-12 00:12:21 得分 10
根据Windows编程思想,每个程序有且只有一个app对象,代表程序本身,还是放在app里吧。Top
12 楼lye(laye)回复于 2003-12-12 00:12:35 得分 0
学习中。。。。Top
13 楼maquanwei(深爱编程)回复于 2003-12-18 12:21:01 得分 0
最终采用了SingleTon方法达到了目的。Top




