谁给俺讲解一下什么是三层架构?

Twoboy 2007-06-04 11:27:10
是不是所有的数据库操作都通过Web Service来完成就叫三层架构?
还是编写个数据库Provider来访问数据库?
WinForm和WebForm的三层架构模式是什么?
...全文
2049 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
cookblack 2009-02-04
  • 打赏
  • 举报
回复
17楼说的很容易理解,精辟!顶
AA123456 2007-06-11
  • 打赏
  • 举报
回复
去看PetShop吧
熊霸天 2007-06-11
  • 打赏
  • 举报
回复
我写了个三层架构的例子,不知道对不对,欢迎大家批评指正(QQ群:11317177)

简单示例代码放在 QQ群:11317177 共享里

演示地址:
http://my.cnlog.cn/cm/Forums/Catalog.aspx?f=FORUMS

写的很简单,见谅
vodoon 2007-06-11
  • 打赏
  • 举报
回复
1. UI Tier(User Interface, 用户接口层)
表示层完成向用户展示界面,提供进一步操作的“驱动接口”,例如按钮,并显示结果。
2. Business Tier(商业层)
完成数据加工,提供加工后的数据给表示层,或者数据层。又可以分为 BLL(Business Logic Layer, 商业逻辑)和DAL(Data Access Layer, 数据访问)。DAL负责存取数据,BLL负责对DAL层操作,对数据进行运算和操作。BLL也负责响应表示层的事件。

3. Data Tier(数据层)
完成数据存储功能。可能是数据库、数据源、XML、文本文件等。

这样就把 数据、业务、显示 分开了。UI层只负责显示给用户看,至于数据怎么处理运算,由BLL进行并响应,处理完的数据,怎么存取由DAL层进行,数据怎么存在介质上由Data层完成,DAL就不用管。各层之间相对比较独立,物理依赖性就不那么高了,有时候就只需要编译改动过的层。

一般对开发和设计人员来说,只需要对UI, BLL, DAL 进行设计开发,DATA Tier由OS或者DBMS来进行,你只需要按“格式”来存取数据即可。

“三层结构的程序不是说把项目分成DAL, BLL, WebUI三个模块就叫三层了, 下面几个问题在你的项目里面:
1. UILayer里面只有少量(或者没有)的SQL语句或者存储过程调用, 并且这些语句保证不会修改数据?
2. 如果把UILayer拿掉, 你的项目还能在Interface/API的层次上提供所有功能吗?
3. 你的DAL可以移植到其他类似环境的项目吗?
4. 三个模块, 可以分别运行于不同的服务器吗?

如果不是所有答案都为YES, 那么你的项目还不能算是严格意义上的三层程序. 三层程序有一些需要约定遵守的规则:

1. 最关键的, UI层只能作为一个外壳, 不能包含任何BizLogic的处理过程
2. 设计时应该从BLL出发, 而不是UI出发. BLL层在API上应该实现所有BizLogic, 以面向对象的方式
3. 不管数据层是一个简单的SqlHelper也好, 还是带有Mapping过的Classes也好, 应该在一定的抽象程度上做到系统无关
4. 不管使用COM+(Enterprise Service), 还是Remoting, 还是WebService之类的远程对象技术, 不管部署的时候是不是真的分别部署到不同的服务器上, 最起码在设计的时候要做这样的考虑, 更远的, 还得考虑多台服务器通过负载均衡作集群

所以考虑一个项目是不是应该应用三层/多层设计时, 先得考虑下是不是真的需要? 实际上大部分程序就开个WebApplication就足够了, 完全没必要作的这么复杂. 而多层结构, 是用于解决真正复杂的项目需求的.”

而且三层之间有时候也不用那么严格,得根据实际业务逻辑来判断使用。这也是软件开发所以没有一个固定流程的原因。

还有个俺收藏得
UI层:
浏览器 —— 要考虑一下不同的浏览器、和插件若干
js脚本 —— ajax这一类的,数据验证了什么的。
显示数据 —— 放在.aspx 页面
提供数据 —— 放在.aspx.cs 页面
逻辑层:
业务逻辑 —— 承上启下,但是大多数情况只用一行代码就可以实现了。
数据逻辑 —— 组合SQL语句,存储过程的话就是给参数赋值了
数据层:
SQLHelp —— 具有类似功能的东东
数据库里的存储过程 —— 不用存储过程的话就略掉
数据库里的视图 —— 同上,我比较喜欢用
数据库里的表 —— 基础的东东了,对于客户来说,里面的数据是最最重要的了。

三层架构的困惑:为什么要分出数据访问层
http://community.csdn.net/Expert/TopicView.asp?id=4946236
三层架构之我见 —— 不同于一般的三层架构。也许对您会有所启发!
http://community.csdn.net/Expert/TopicView.asp?id=4949724
关于分层和架构的思考--请重视业务逻辑!
http://community.csdn.net/Expert/TopicView.asp?id=4947750
小调查,大家现有项目系统构架都是怎么样的?
http://community.csdn.net/Expert/TopicView.asp?id=4937348
请教一个架构上的问题,在某些情况下,我是不是应该抛弃ORM的思想
http://community.csdn.net/Expert/TopicView.asp?id=4947610
。NET构架之我见
http://community.csdn.net/Expert/topic/4950/4950034.xml?temp=.4981195
iloveaspx 2007-06-11
  • 打赏
  • 举报
回复
http://bbs.51aspx.com/showforum-44.html
LutzMark 2007-06-11
  • 打赏
  • 举报
回复
老张去饭馆,先跟服务生要菜单看,这就是表述层,再跟服务生点菜,服务拿着菜单去交给后台大厨,这就是业务逻辑层,大厨做好菜再让服务生拿上来,这就是数据访问层
  • 打赏
  • 举报
回复
study
lovehongyun 2007-06-04
  • 打赏
  • 举报
回复
三层跟Web Service有关系吗?

没有.

三层的概念.去网上搜一下吧.
EYESPACE 2007-06-04
  • 打赏
  • 举报
回复
要讲好这个,要对它有很深的理解,你还是查资料吧
sunzhong2003 2007-06-04
  • 打赏
  • 举报
回复
注意论坛上很多人,都把MVC与三层混为一谈了
balenoww 2007-06-04
  • 打赏
  • 举报
回复
没有关系
sunzhong2003 2007-06-04
  • 打赏
  • 举报
回复
UI(.aspx)--------->BILL(业务处理)------>DAL(数据处理)---->永久存储(数据库)
DALFactory(工厂)、IDL(接口)、Model来直接或间接的联系他们之间的关系

三层跟Web Service有关系吗?
oldmoon 2007-06-04
  • 打赏
  • 举报
回复
去CSDN搜一下吧,讨论这问题的贴子很多
gxzlolo 2007-06-04
  • 打赏
  • 举报
回复
我只懂一点
其实也没有那么复杂
三层架够一般分为数据层,逻辑层,UI层。
数据层是用来跟数据库打交道。
Twoboy 2007-06-04
  • 打赏
  • 举报
回复
看来这个问题是没有人说清楚了…………
本来这个问题就不容易说清楚
三层应该不涉及到具体的技术吧?
应该是软件的架构问题…………
sunzhong2003 2007-06-04
  • 打赏
  • 举报
回复
你这里说的数据层就是永久存储(数据库),与DAL数据处理,根本是两回事
Twoboy 2007-06-04
  • 打赏
  • 举报
回复
本来有点头绪了,但是看到下面的一段话就又懵了…………

下面是我在网上找到的一段话:

3. 数据层
  数据层就是DBMS,负责管理对数据库数据的读写。DBMS必须能迅速执行大量数据的更新和检索。现在的主流是关系数据库管理系统(RDBMS)。因此,一般从功能层传送到数据层的要求大都使用SQL语言。

为什么说数据层就是DBMS呢?DBMS不就是Database Management System吗?就是平时所说的SQL Server或者Oracle吗?到底谁说的对啊?就没有人可以用一段简短的话来概括吗?
熊霸天 2007-06-04
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/5576/5576260.xml?temp=.6427118
Twoboy 2007-06-04
  • 打赏
  • 举报
回复
看来大家都比较了解,能不能用一段话概括一下
因为你们都懂了才觉得容易,我可是菜菜………………

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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