一个项目,有一个主程序,多个子模块程序(.exe),其中数据模块ADOCONNTION包含于PACKAGE中,并注册类,在主程序的登陆窗体被动态调用加载(之所以要动态调用,是基于担心远程服务器停止运行,如果在程序一开始阶段就加载就会出现问题),
进入主窗体后,多个子模块程序通过主窗体进行链接(在主程序中我可以调用EXE文件,BPL文件,DLL文件)。现在的问题是多个子模块如何共享主程序中的ADO?
我用过再次进行动态加载模块包,但这种方式好像成了多次联接ADO了?而不是共享另:李维的那篇《PACKAGE的威力》带有一些欺骗性,在那篇文章中的模块包他已加入两个数据控件,而且是ACTIVE为TRUE,也就是说在另一子窗体打开时他的数据已经存在了。所以打开的时间非常短。但问题是我们只能调用全部同类控件中的一个,而在实际中项目我们不只是用几个ADOQUERY,DATASET。有些头晕。20分为见面分,解决问题给多一百分,不够再加。
进入主窗体后,多个子模块程序通过主窗体进行链接(在主程序中我可以调用EXE文件,BPL文件,DLL文件)。现在的问题是多个子模块如何共享主程序中的ADO?
我用过再次进行动态加载模块包,但这种方式好像成了多次联接ADO了?而不是共享另:李维的那篇《PACKAGE的威力》带有一些欺骗性,在那篇文章中的模块包他已加入两个数据控件,而且是ACTIVE为TRUE,也就是说在另一子窗体打开时他的数据已经存在了。所以打开的时间非常短。但问题是我们只能调用全部同类控件中的一个,而在实际中项目我们不只是用几个ADOQUERY,DATASET。有些头晕。20分为见面分,解决问题给多一百分,不够再加。
但是为什么一定要用这种方法来实现吗?
实际上有两种解决方式,不过各有优缺点。
1)数据库连接池。也就是说,你的各子模块不需要共享你那一个ADO连接。而是个子模块各自管理各自的数据库连接 -- 需要时建立,用完后释放。目前大多数WEB系统都采用这种模式。对于连接的速度问题,是采用池来解决。
这种方式的好处时,各模块各自独立,基本没有偶合性。对象化程度非常高。缺点是:有重复劳动在里面。比如反复的要写建立、释放连接的代码。所以一般会先写好共享代码。
2)接口方式。类似与你现在写的方式。数据库访问代码写在一个连接库里,各模块访问该连接库时,不是直接和连接库的控件打交道,而是访问其对外的接口,如定义一个CLASS,向外输出数据。常见的比如ADO组件,就是对用户屏蔽了数据访问底层信息,你只要访问其接口就可以获得数据了。缺点是:有一定技术难度。
偶目前一般采用第二种。不过近期发现第一种也是很不错的模式,特别是在分布式环境下。^_^。
总言而之,不关哪种方法,我认为你在库里面暴露ADOCONNECTION控件给给子模块访问的设计是不正确的。
致: foxnt(天马幻想)
像第一种方式:实际上我认为速度将会很慢,而且是重复的联接;没有达到共享的目的;
你说在库里面暴露ADOCONNECTION控件给给子模块访问的设计是不正确的,能不能具体一点,谢谢。