大家一起找找缺点,并指正! 300大洋 ( 积分: 300 )

  • 主题发起人 主题发起人 cuiba
  • 开始时间 开始时间
C

cuiba

Unregistered / Unconfirmed
GUEST, unregistred user!
以下这段代码是我公司三层系统的一段连接数据代码,请同仁们研究共同学习,看看这地方有哪些不足之处或是有待改进的地方,共同探讨!并散分!300大洋!给最有idea的富翁,及方法的建议者.仅给一位,只有第一!
procedure TXRDMASCommon.XGetACDSData(const DBName, SQL: WideString;
PacketRecords, GotRecCount: Integer; var ResultData: OleVariant;
XMLData: WordBool);
var
I: Integer;
QryTemp: TADOQuery;
CDSTemp: TClientDataSet;
DSPTemp: TDataSetProvider;
begin
QryTemp := TADOQuery.Create(Self);
CDSTemp := TClientDataSet.Create(Self);
DSPTemp := TDataSetProvider.Create(Self);
try
QryTemp.Connection := GetAConnection(DBName);
DSPTemp.Name := 'CDSTemp'; {Do not localize}
DSPTemp.DataSet := QryTemp;
//if not (poAllowCommandText in DSPTemp.Options) then
//DSPTemp.Options := DSPTemp.Options + [poAllowCommandText];

DSPTemp.Options := DSPTemp.Options + [poAllowCommandText];

CDSTemp.ProviderName := DSPTemp.Name;
CDSTemp.PacketRecords := -1;
if (PacketRecords > 0) and (GotRecCount >= 0) then
CDSTemp.PacketRecords := GotRecCount + PacketRecords;
CDSTemp.CommandText := SQL;
DSRefresh(CDSTemp);
CDSTemp.First;
if GotRecCount > 0 then
begin
for I := 1 to GotRecCount do
CDSTemp.Delete;
CDSTemp.MergeChangeLog;
end;
if XMLData then
ResultData := CDSTemp.XMLData
else
ResultData := CDSTemp.Data;
//AppendToFile(ErrorFileName + '.XMLData', CDSTemp.XMLData);
finally
QryTemp.Free;
CDSTemp.Free;
DSPTemp.Free;
end;
end;
 
(query+dsp)-->data layer
cds -->logic layer
 
这样的三层.......
客户端知道连什么数据库,知道执行什么SQL,肯定业务规则什么的都放客户端了
还要中间层干嘛?

for I := 1 to GotRecCount do
CDSTemp.Delete;
在大表中,这样会不会很慢?
如果是我,会写存储过程来做这个操作,直接在数据库端就决定取回多少记录,而不是先取到中间层再来删除多余的(ClientDataSet是很慢的)
 
楼上说的确实有理,在for 里好像是加快传输速度,数据量一大ClientDataSet其实却慢了!
各位请继续!
 
这样的三层,说真的吧.真的很那个...........帮顶了
 
其实很多人做的三层都是这样的三层吧..被大多数同行称为假三层.但业务逻辑完全封装在中间层的三层也不为多吧.界面和逻辑完全能做到分开也不容易.就算能完全分开,好像有时候维护久了.代码量更宠大.除非至始至终是你一个人在控制他的整体架构.
 
好多的三层都是受了李维的影响
 
我来说点意见:
严格意上来说,三层系统的业务逻辑控制应放在中间层上去,但Delphi开发工具最大的优点就是开发效率高,如果把业务逻辑控制应放在中间层上,那么这么一个优点就没有了,所以现在很多搞项目的,由于开发工期问题,都会选择做假三层,应用服务器上只做一些公用方法,业务控制放在客户端.
楼主的这个公用方法,效率方面不会太好
 
顶一个,接个分
 
楼主的代码没问题,但不要讲是三层好不好。。。
也太假了点。。。并且不利于代码维护,搞得这么复杂。。。
 
请继续,还请各位拿出些自己的方法一起讨论一下
共同学习嘛
 
后退
顶部