600分求解,见者有分,接受答案马上放出所有的分(200分)

  • 主题发起人 主题发起人 delphihard
  • 开始时间 开始时间
wellknow,HunterTeam,说的有道理。
具体的事还要自己来决定。
 
首先得搞清楚这个系统是商业型、科研型还是属于本系统(单位)内部使用的,这些关系到系统开发的指导思想问题
其次要贴出需求分析的纲领性内容,这才关系到系统模块结构合理性问题。
否则,所有的讨论都是抽象的类(个人观点)。呵呵!
 
使用类工厂,根据需要取创建所需要的对象;
设计模式中专门讲了类工厂
这样,也节省内存
 
我也遇到这种问题,
帮你提
 
wellknow说的不错,而且你应该在分清了各个模块的相互关系后,再确定是否需要每一个
都建立一个DLL!DLL当然是有好处的,但如果你将本来相关性很大的模块或表硬分开,那样
恐怕以后协作时会更麻烦。而如果将基本没有什么关系的模块和表分开处理,那确实会给
以后的升级及维护带来很大的方便性。
 
使用DataModul可以以最少的Table或Query满足项目的需要,无论你怎样设计,我想一个
DataModul是肯定要的!
 
to delphihard:

Wellknow 及flb_delhiibbs分析得不错。不过我还想补充一点什么,权作抛砖引玉
了。
首先,我觉得,将应用做成DLL,只是会减少应用程序的大小,以及程序启动时的速度,
但在以后的操作调用中,需要不断的装入DLL,大量增加了程序的开销。
其次,将一个应用写成大多的DLL,虽然易于维护,但开发时难于协调,特别是若某
两个模块具有相似或相反的功能,就不必要写在两个DLL。同时也不利于编辑调试。
DLL一般做成一系列功能函数的的集合,来输出某些功能。至于某一(些)单个业务的全部处理过程,
建议写在应用程序中。
你现在的系统有32个表,应该不算大多,到底分放在多少个数据模版上,我想应以
各个表之间的紧密性和相互关系来衡量,比如a,b,c,d,e,f,g 7个表,共同处理某一业务
的数据,就可以将其放在一起,不过这没有统一的标准。这样做只是表明你写程序的习惯好
罢了。放在一个模版上也无妨,我公司的一个系统用了至少300个以上的数据组件,就只
用了两个数据模版datamodula。我估计你的系统可以用2-3个这样的数据模版就行了。
采用的依据是按表的相互联系的程度。

另外,你说每个表的数据量很大,所以要做成DLL,为什么呢?
数据模块只是放Tquery类控件的非可视化的窗体,并不全因为放入多个Tquery之类的
控件而会加大多少,程序只是在Tquery打开的时候,占用一定的内存。关闭的时候,
又会释放掉,我想你的程序不需要同时打开很多个query之类的组件吧,如果是,
做成DLL也会一样,因为反正需要一定的内存装入DLL,并开辟一定的空间做缓存。

总之,衡时你程序的性能,datamoudle的多少,并不是主要的问题,
关键是你程序的精炼及执行效率。 (以上仅本人的一点建议,望各位莫笑!)
 
如果你信我,那就按我的办法做,到底用BDE,ADO还是其他,
到底是一层,三层,还是用MS的组件,
我认为,只要能满足用户要求就行了,适而可止.
但问题最关键的是,要做一个方便维护和升级及扩展的系统,这仅对编程者来说.
对用户来说,你的技术细节他们并不了解,也不关心(关心也没用.)
 
数据连接用MTS,功能模块用基本COM对象的DLL(实际上每个功能模块都是一个插件程序),
主程序做和个插件管理器,于用注册和加载DLL,即解决了数据连接多的问题,
也解决了模块管理混乱问题,有非常好的可扩展性。
 
32个table放在一个DataModule里面就可以了。
[:)][:)][:)]
 
做成mdi的比較好
啟動時只需要啟動一個main form
其他的用時再call
有些query或clientdataset可以共用
有些因為考慮際要修改又要查詢才分開獨立
這樣就可以減少文件的大小
最後再用aspack壓,就更小
 
其实,再多表,也有其一定的规律,如我前面所述,
我将我的所有Form无非划为三种:TdlgBasic, TfrmBasic, TfrmRpt
这是在前台,
在后台数据库的表和视图及存储过程(反正就是前台需要调用的部份)取名一定要严格
按照命名规则(当然,在DELPHI那一边也是如此,毕竟,游戏的规则是大家自己定的)
如,采购方面的是:StockOrder, StockOrderD;StockReceive,StockReceiveD;StockReturn, StockReturnD;
销售方面类似地有:SaleOrder, SaleOrderD;SaleReceive,SaleReceiveD, SaleReturn, SaleReturnD;SaleCash, SaleCashD;
其他如斯;
这样,在你的TfrmBasic中就可以定义如下:
procedure TfrmBase.FormCreate(Sender: TObject);
begin
sFun := (Sender As TControl).Name;//模块功能名称, sFun是一个公共变量,其下属的子窗体都可以调用的.
BillName := Copy(sFun, 4, Length(sFun) - 3);//单据名称
end;

然后,在其子窗体显示时,
procedure TfrmBase.FormShow(Sender: TObject);
begin
M.Close;//窗体显示时,打开主明细表
M.Open;
M.Last;
OpenBill(M.FieldByName('ID').AsInteger);
end;

此时,过程OpenBill是这样实现不同的单据统一调用的:
procedure TfrmBase.OpenBill(ID: Integer);
begin
//打开指定单据ID的 明细
with D do
begin
Close;
Parameters[0].Value := ID;
Open;
end;//with D do
//打开 明细数量
if HasField(D, 'GoodsID') AND HasField(D, 'Quantity') then
begin//HasField函数是自定义的.
with DM.DQ do
begin
Close;
Parameters[1].Value := ID;
Parameters[2].Value := BillName + 'DQ';
Open;
end;//with DM.DQ do
end;//if Has DQ
end;
这样就根据单据窗体的Name来打开不同的单据了.
这样,不理它是什么样的单据,你要增加多少单据,通吃了,对不?
 
to all:
他是骗子,不要理他了,我刚才看了这个家伙的求解记录,
他从来就没有因为别人回答了问题,而给分答谢过。我 Cao!
不信大家去看看就知道了,我不知道delphihard 积分已经举出来了,
为什么却不把分发下来,真损!
我建议以后大家对这些人不要太热心了!
 
to all:
他是骗子,不要理他了,我刚才看了这个家伙的求解记录,
他从来就没有因为别人回答了问题,而给分答谢过。两个月前提的问题,
到现在还没有给分,我 Cao!
不信大家去看看就知道了,我不知道delphihard 积分已经举出来了,
为什么却不把分发下来,真损!
我建议以后大家对这些人不要太热心了!
 
to all:
他是骗子,不要理他了,我刚才看了这个家伙的求解记录,
他从来就没有因为别人回答了问题,而给分答谢过。两个月前提的问题,
到现在还没有给分,我 Cao!
不信大家去看看就知道了,我不知道delphihard 积分已经举出来了,
为什么却不把分发下来,真损!
我建议以后大家对这些人不要太热心了!
 
to all:
他是骗子,不要理他了,我刚才看了这个家伙的求解记录,
他从来就没有因为别人回答了问题,而给分答谢过。两个月前提的问题,
到现在还没有给分,我 Cao!
不信大家去看看就知道了,我不知道delphihard 积分已经举出来了,
为什么却不把分发下来,真损!
我建议以后大家对这些人不要太热心了!
 
to all:
我强烈建议大家对这些 “不酬而获”之人不予理彩!
 
后退
顶部