三层结构的划分

first2526 2004-07-26 09:15:36
最近总在想三层结构的划分问题,外观层好办了,就是界面。关键在于业务层和数据访问层的划分,我想不太明白。
按照c/s结构来说,大多是业务逻辑和数据库的访问都写在客户端,数据库端可能之处理一些计算复杂的存储过程。
现在3层结构,我就弄不明白了。
三层结构的数据访问层究竟要干些什么。数据访问层要负责根据业务层提出的sql语句来返回结果或者更新数据库吗?这样的话,具体的sql语句是要写在业务层,根据业务的不同传递不同的sql语句吗?那数据访问层就是做一个公用的类,类里面的方法只是执行这些sql语句吗?如果是这样的话,假设可以作出一个很完善的类,里面根据传递的sql语句、参数完全可以得到你想要的结果的话,是不是在这个数据访问层,如果不更换数据库的话,就可以做到各个项目中都可以用这个数据访问层呢?
举个例子来说:
表示层,业务层方法get需要从数据库表A中提取a,b,c三个字段,数据访问层有一个执行sql语句的方法execute(sql,ref),这样的话表示层调用业务层的get方法,业务层传递相应的sql语句select a,b,c from a和参数..调用数据访问层的execute方法来获取相应的信息。不知道这样对不对。如果是这样的话,那么数据访问层真的可以共用了吧。还有个问题就是,业务层决不是那么简单的用几个sql语句就能解决的,需要很多的判断,而判断过程中,就难免会遇到select,update等sql语句,而这些sql语句必须用到一个事物一起成功或者失败。这样的话,凡是执行sql语句的地方就要调用数据访问层的公共方法,很难做到用同一个事务。那么这样的话,是不是就得使用存储过程来做,通过数据访问层来执行存储过程,业务层调用数据访问层的执行存储过程的方法呢?
因为一直没有理解明白3层结构的划分,所以表达的可能不是很清楚,请大家多费费心。如果谁能有一个简单一点的,3层结构明确一点的例子给我,就太感谢了。
我的邮箱yuxin2526@yeah.net
QQ:349886828
...全文
438 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
wqbmercury 2004-07-27
  • 打赏
  • 举报
回复
mark
first2526 2004-07-26
  • 打赏
  • 举报
回复
虽然还是不太懂。谢谢大家参与
gkwww 2004-07-26
  • 打赏
  • 举报
回复

.Net framwork 2.0以后会有一个 Object Space的东东。类似ORM的数据访问组件。
lyfxzzb 2004-07-26
  • 打赏
  • 举报
回复
感觉没有必要分的那么细,赞同小星星的观点
Marster 2004-07-26
  • 打赏
  • 举报
回复
请问:
在新建visualc#项目+asp.net web应用程序时就报错
“visual stdio.net已经检测到指定的web服务器运行的不是asp.net版本。不能运行”
搞得我开始学就有问题,什么事情都学不了!急救!!!
likeitbest 2004-07-26
  • 打赏
  • 举报
回复
不好意思,打太多错字了
orm中间件已经集成到了j2ee体系产品中,ms dot net有没有(好像没有见到),但第三方的东西一定可以用进来。不过,我不关心这个。
likeitbest 2004-07-26
  • 打赏
  • 举报
回复
orm中间件已经继承到了jaee体系产品中,ms dot net有没有(好像没有见到),但第三方的东西一定可以用进来。不过,我不关心这个。
likeitbest 2004-07-26
  • 打赏
  • 举报
回复
wendy188(阿吉) ,是的,没有必然的设计。动态生成查询语句可能就是一种需要。而且有时候可能别stored procedure替代,等等。所以,至于写不写sql,在哪个层次写,需不需要写,怎么写都要看实际项目和平台,服务器产品等。所以只能有一般的原则,没有永远的设计。
phoenixsharp 2004-07-26
  • 打赏
  • 举报
回复
有些应用对于三层式结构体现的不是很明显.穿插,引用,好像分的不是那么清楚.俺觉得没有明显的界线,只要头脑里有这种概念就行啦.~~~
wendy188 2004-07-26
  • 打赏
  • 举报
回复
赞同likeitbest.
sql语句尽量全部集中在数据访问层,但在动态生成查询语句时,可能需要在业务规则层生成sql语句。另,如有比较完善的o/r映射机制,基本上都不用写sql了。
likeitbest 2004-07-26
  • 打赏
  • 举报
回复
呵呵,我来说几句。
我觉得还是业务层不要使用sql语句。它需要什么访问数据,通知数据实体层和数据访问层就好了,不然数据库变化会影响数据数访问层,还影响业务逻辑层,就不太好了。
我觉得数据实体层是他们之间的传递和返回的结果。设计上有一个原则就是让各个层次相对独立,对应并行开发和重用,移植都是很好的。
wendy188 2004-07-26
  • 打赏
  • 举报
回复
我是这样考虑的:
1用户界面层:包括web form 或win form.
2中间层:a:业务外观层
b:业务规则层
c:数据访问层
3具体的数据存储:关系数据库,对象数据库,或文件系统
用户界面和业务外观或数据访问层通信,交换数据。数据访问层负责和数据存储通信。
first2526 2004-07-26
  • 打赏
  • 举报
回复
我再等更明确一点的说法,呵呵
chang110cn 2004-07-26
  • 打赏
  • 举报
回复
up!
chNET 2004-07-26
  • 打赏
  • 举报
回复

推荐看VS.NET的自带案例 Duwamish7!
位置在你的 vs.net安装目录\Enterprise Samples下
guying999 2004-07-26
  • 打赏
  • 举报
回复
我理解的是:
数据访问层:只是用来和数据库打交道
业务规则层:用来处理业务逻辑,然后调用数据访问层以完成对数据库的操作
外观层:我们看到的页面,在该层调用业务规则层

hertcloud 2004-07-26
  • 打赏
  • 举报
回复
个人感觉!
最简单的定义
表示层 asp.net (web form)
逻辑层 ado.net (其他逻辑操作)
数据层 sql server或者 其他 数据库处理
zhangyp 2004-07-26
  • 打赏
  • 举报
回复
数据访问底层应该可以共用,如微软的sqlhelper。现在许多项目都用它作为数据访问底层。
CMIC 2004-07-26
  • 打赏
  • 举报
回复
关于Duwamish的一些资料
http://www.csdn.net/Develop/Read_Article.asp?Id=18110
http://www.csdn.net/Develop/Read_Article.asp?Id=17067
CMIC 2004-07-26
  • 打赏
  • 举报
回复
看Duwamish,vs.net安装目录\Enterprise Samples有

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧