如何在三层结构中实现数据库查询

progame 2003-05-06 10:07:56
大家知道查询条件是多种多样的
那么如何查询由哪层完成?

表现层组合SQL语句? 
肯定不对

业务层组合SQL语句? 
是不是每个查询都要一个业务组件来实现?

举个例子,一个订单列表的报表查询
查询限制条件有日期起始 客户名称 产品分类 业务员....

是不是要一个专门的组合去实现这个查询?

...全文
6 点赞 收藏 22
写回复
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
关注
回复
progame 2003-05-07
因为我不觉得这样的查询尤其是像客户列表啊,单据列表啊这样的东西有业务逻辑在里面

放在业务层感觉很不合理

回复
angeltears 2003-05-07
帮你踢一脚
回复
foolflyfish 2003-05-07
马甲帮顶
回复
progame 2003-05-07
再次UP
回复
progame 2003-05-07
还有就是我封装了一个类,来完成数据库的连接、sql 语句和存储过程的调用并返回相关结果集
请问这个类是放在数据服务器上还是应用服务器上?

而且如果整个局域网有我程序的两个实例在运行
它们又是连到相同的服务器但是不同的数据库时
比如一个是连DataServer机器上的A数据库,一个是连DataServer上的B数据库

而业务层的组件部署是一样的,假如都是在ApplicationServer机器上
那么如何控制它们的连接方式呢?

这时客户端会有权决定连哪个数据库甚至是哪个Server
那是不是得客户端在业务层创建一个连接对象
然后对于每个业务层的处理对象都传递这个连接对象来决定对哪个数据库操作?
这样也太麻烦了吧
回复
progame 2003-05-07
这样的话开发效率肯定加快了

但同时维护的开支就变大了

因为客户端已经涉及到数据库的操作了

如果数据库有变动的话,要维护的就不仅仅是业务层了

连表现层也得修改才行
回复
snake_eye 2003-05-07
其实对于查询有时候也要涉及到业务逻辑啊
甲可以查询,已不能查询,(这个是业务逻辑)
不过关于SQL语句,我感觉不该算是业务逻辑,
select a from table这个东西,我们现在开发的
三层结构中是放到客户段了,中间层提供方法返回
data,不过我感觉客户段有SQL,就不是很好的,没
办法老大要这样搞,我们也只能这样搞了!
回复
progame 2003-05-07
楼上说的放在表现层是如何在放法

表现层涉及到SQL语句么?

还是将查询条件传入业务层?

业务层是由一个对象统一处理还是每一种查询都有一个对象来完成
回复
chenyu5188 2003-05-07
放在表现层,由表现层提交给业务层处理再返回结果。
回复
zeng_zhh 2003-05-07
对三层,我的理解是这样,
客户层(客户端),中间层(业务服务器),数据层(数据服务器)

客户端只负责界面部分,中间层处理所有和数据库交互的东西,数据层处理对数据的访问。


不知道这样理解是否很浅薄??

回复
zeng_zhh 2003-05-07
还有就是我封装了一个类,来完成数据库的连接、sql 语句和存储过程的调用并返回相关结果集
请问这个类是放在数据服务器上还是应用服务器上?
:我觉得是应用服务器,客户端向应用服务器发送请求,应用服务器接收到请求进行处理,连接数据服务器。

关于查询的办法,我的做法是这样
把查询语句做成存储过程放在数据库服务器,然后
建立一个客户类,然后建立一个客户方法QueryCustomerData调用存储过程返回数据,
这个客户类放应用服务器,
客户端可以建立实例,发送查询参数到应用服务器,然后。。。就这样了。呵呵

回复
wdwd05 2003-05-07
学习学习~~~但还是不太容易理解3层结构~~~

如果有例子就好了~
回复
progame 2003-05-07
up

回复
progame 2003-05-06
看过了这篇文章

没有多大帮助

我现在只要知道查询应该放在哪一层,如何实现
回复
online 2003-05-06
http://www.ourfly.com/forum/View.aspx?fbId=9&Id=307
回复
progame 2003-05-06
up
回复
progame 2003-05-06
而且事实上这种大量的查询其实说起来并不涉及到什么业务逻辑
我觉得只是数据操作层应该完成的事情

真正的业务逻辑就像一张单据的入库或出库才对
而查询中你觉得它有业务逻辑在里面吗?
回复
progame 2003-05-06
方法我知道

问题是业务层怎么去组织它

对于每一个类型的查询都对应一个组件?

这样针对查询的组件可能就有无数了

像如果我实现了这样的一个类
CCustomerDAO
功能是对数据库进行Find Insert Update Delete操作的

那是不是把客户列表显示时的查询功能也加到这个类里面来
如:
GetCustomers(CusCls as String,... (限制条件) )

还是新建一个类
专门针对这个客户列表查询的
返回结果集
回复
在业务层组织SQL,然后把结果以记录集的形式返回表现层。
回复
发动态
发帖子

1181

社区成员

VB 数据库(包含打印,安装,报表)
申请成为版主
社区公告
暂无公告