多层中应用服务器得接口规划设计问题,回复必有收获。(100分)

  • 主题发起人 主题发起人 ninglng
  • 开始时间 开始时间
N

ninglng

Unregistered / Unconfirmed
GUEST, unregistred user!
在设计应用服务器时,怎么规划接口函数供客户端调用啊?
如,是使用dataset+datasetprovider+clientdataset等控件提供对数据得维护(添加删除更新等);还是自己编写接口函数对数据库操作?
如需要在客户端执行sql语句时,大家都是针对每个sql编写接口函数吗?接口函数的个数有没有限量,合理应不超过多少呢?
我的数据库中有100多个表,需要在服务器上建立100个dataset吗?怎么处理好些?
回复有分
设计优者另开贴加分,表示感谢。
 
你觉得怎么方便就做么做!
 
1:我想你应该弄清楚你的业务到底有多少!
2:数据库有100多个表,那也并不代表着你要建立100个DataSet对象,
除非你想使用有状态对象模型!
3:你可以对数据处理进行抽象化处理,标准操作无非就是 RecordRequest,Delta->ApplyUpdates;
那么接口函数到底会有多少,就算是统计/分析 或者个性化处理,
那又会是如何,分析清楚,那就简单多了!
 
要实现与业务逻辑分开,我觉得也自己编写接口函数对数据库操作,并且按OOP的思想将业务封装。可苦于没有例子代码。
 
to vinson_zeng:
谢谢回答
业务并不多,但是总共合起来有100个表来实现,我就不知怎么实现了,如果建立100多个dataset,再加上中间datasource那会有多少啊。怎么都感觉不合理。
但就是不知怎么分析,抽象成简单的接口调用,不知如何实现?
请举个例子吧!
 
是用dataset+datasetprovider+clientdataset还是编写接口,我觉得就是用Midas还是用COM+的问题。
 
简单的说大家处理100多个表的删除,添加记录都是怎么做的?
1种标准的使用一表对应一组dataset+datasetprovider+clientdataset属性关联后对数据操作;
2编写接口函数完全使用sql语句对数据操作;
3使用动态dataset+datasetprovider+clientdataset但不关联,通过接口函数操作;
大家选哪一种?我采用第三种方式,但不知合理的设计.
大家都来谈谈
 
这是我保存数据的一个接口函数,没有完成,不知如何修改的合理一些.
function TForm1.saveData(aSql :string;
aOleVariant :OleVariant):Boolean;
var
i:integer;
dspSaveData: TDataSetProvider;
sqlSaveData: TSQLQuery;
begin
try
try
sqlSaveData := TSQLQuery.Create(self);
dspSaveData := TDataSetProvider.Create(self);
except
Result:=False;
//错误提示:数据处理进程创建错误,保存数据无法继续.请重试!
end;
dspSaveData.Options := [poAllowCommandText];
dspSaveData.DataSet := sqlSaveData;
sqlSaveData.SQLConnection := SQLConnection1;
sqlSavedata.SQL.Text := aSql;
try
try
sqlSavedata.Open;
except
Result:=False;
//Raise 错误提示:数据打开错误,保存数据无法继续.请重试!
end;
dspsavedata.ResolveToDataSet:=false;//必须的条件
// dspsavedata.Data
// clientdataset2.Data:= dspsavedata.Data;//clientdataset1.Delta;
dspsavedata.ApplyUpdates(aOleVariant,-1,i);
Result := true;
finally //关闭以节约系统资源
sqlSavedata.Close;
end;
finally //释放创建
dspSaveData.Free;
sqlSaveData.Free;
end;
end;

大家看怎么改改
 
大家帮我解决问题啊,分不够再加啊
 
可惜我没福气得分了,我也没有什么好的建议
 
花兄,我还有问题请教呢?你可是websnap高手啊.
我不知到使用pageproducer怎么处理action啊.给个有添加,删除的页面吧.
想必你还记得我吧.ninglng@163.com
 
强烈关注此问题,我门现在基本上是一个表连接一table,应用服务器是用removedatamodul
做的
 
to zhousi
那要是几百个表,你还这样做吗?
 
这样做太烦琐!工作量太大!
 
+系统表,326个表,还没算view,都是一对一,偶尔用all的,
现在感觉烦琐了,我们的程序是假三层555,质量差哦
 
一起研究怎么改变这种局面吧!
最好能找个优秀的方案
 
我正在按这种思路实现,看是否对你有帮助:
1.中间层按需要提供众多功能或服务ID,供客户端调用.
接口可能是Query(funcid:String),Update(funcid String,data OleVariant)
2.客户端只需调用服务器提供的方法和传递数据或参数即可.
3.服务器与客户端的连接方式可采取TCP服务器方式,或利用原 Midas 的方式.
 
to Adanz
谢谢你的支持,针对你的方式提点意见可否?
如果使用你说的:
接口可能是Query(funcid:String),Update(funcid String,data OleVariant)
来实现,客户端还是避免不了使用sql语句,这样维护比较麻烦.
我得方式是直接传递data,delta.客户端处理data,返回delta即可.这样灵活性更高.
就大家的情况看,这样用的不在少数.本帖目的就是找一种效率更高的处理方式.
如在实例创建.释放.重复利用方面-减少创建,加快释放,尽量重复利用等.
 
有些误会了.
我指的funcid是指服务器的服务或功能ID,
每个ID包括处理逻辑如众多SQL语句.
客户只需知道服务或功能ID,和参数即可,
不用SQL语句.
 
后退
顶部