三层架构到底怎么玩?

bdhwjs 2009-01-02 01:16:14
刚刚参加工作半年,虚心向前辈们学习!长话短说,在玩三层之前,身在小公司,做的项目基本都是一个人从头做到尾,在设计思想及架构上也只算是一层架构,也就是在aspx.cs文件中直接写数据访问及业务代码,唯一的封装只有一些常用数据库操作及工具类。自己知道,这样的东西基本拿不上台面,好吧,来学三层,研究了一阵,到头来还是一头雾(当然也有一些心得)。虽然也能写出三层的程序来,但也只是为了做出三层而写三层。也许是自己笨,也许是以前的那种写法成了习惯,对三层的理解上老是转不过弯。无奈,来请教了…

我想问的是(为了使问题更明确,我也列出我自己肤浅的理解):

1.
三层到底怎么体现他的好处?
(都说三层好,易维护,易扩展,代码复用性好,高内聚,低耦合!可到底具体怎么体现出这些好处那?就我所知,三层就是让各层分离开来,更关注自己要做的事,但也同时对程序员面向对象思想的要求较高,更增加了代码的编写成本,为了就是易于以后维护和扩展。那好,既然针对维护和扩展,基本上就是应对bug及客户的需求更改,面对这些我基本是从页面入手,然后查看对应代码去修改。如果是一层,我可以马上看到这段业务代码,直接修改就行了,而如果是三层,UI层就只有其他层的方法调用,我要修改就得去BLL、DAL或许还有其他层飞来飞去,尤其是BLL层,我总觉得有点”脱裤子放屁”的感觉,真够麻烦!难道就是为了重新编译的时候不用整个项目编译?我希望有真正理解的兄弟帮我解开这个结,越具体越通俗越好。比如我们做各层的时候都是在一个解决方案中每层建一个项目而不是都建在一个项目中,就是为了可以单独重新编译一层吗?比如webForm项目,重新编译了BLL层是将得到的dll文件重新覆盖到bin文件夹中这样实现修改吗?我直接用 UI层访问DAL层,不用BLL层不行吗?…)

2.
三层到底什么时候应该用?有没有不该用的时候?
(有人说,需要数据库访问的时候就用三层,或者说业务逻辑比较复杂的时候使用,再或者说客户需求更改会比较频繁的时候使用。当然我也理解,用三层就是为了它带来的好处和优点。但我想,现在公司里做的项目都还算较复杂,就我感觉,是项目就得用三层。那是不是只要是项目就应该用三层呢?)

我知道网上对三层的介绍资料有很多,我也看了一些,但大多都是比较笼统,概念性的东西。对于我这种新手来说,还是愿意面对比较实际比较通俗的答案。希望有前辈能帮我以及和我有同样困惑的新手,怎样从一层进入三层的世界,踏出三层这一步!
...全文
548 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
adongcool 2009-01-05
  • 打赏
  • 举报
回复
围观.
talenliao 2009-01-05
  • 打赏
  • 举报
回复
学习了,我只会写代码,基础差
三层还没搞清楚啥回事

跟楼主以前一样,只是把一些常用的函数之类的写成一cs文件

其他多少层多少层,没搞懂啊

学习中!
shunanlove 2009-01-05
  • 打赏
  • 举报
回复
"但也只是为了做出三层而写三层"我也是~!
shizheyangde 2009-01-05
  • 打赏
  • 举报
回复
对于小项目,甚至接口不稳定的大项目,没什么意义,还用副作用(“在各个层中飞来飞去”)。
分层的意义:
1.独立系统:接口稳定(建立在对需求的深刻理解和透彻分析)
2.分布异构系统:系统集成上,就是2个dal层的数据一个来自北京的.net,一个来自上海的jsp;在bll层再拿这两个数据进行连接筛选,得到想要的数据,显示页面上
guolei14186 2009-01-02
  • 打赏
  • 举报
回复
我最近刚学习了三层结构,
感觉除了DAL好剥离外,
其他的都没有一个明显的界限去分开它们,
有点郁闷……
king19840811 2009-01-02
  • 打赏
  • 举报
回复
如果是一层,我可以马上看到这段业务代码,直接修改就行了,而如果是三层,UI层就只有其他层的方法调用,我要修改就得去BLL、DAL或许还有其他层飞来飞去,尤其是BLL层,我总觉得有点”脱裤子放屁”的感觉,真够麻烦


首先我觉得你对三层存在根本上的理解错误。。三层的基本意义就是为了业务,数据,UI相分离,你说的三或实现的三层只是伪三层
幻影时空 2009-01-02
  • 打赏
  • 举报
回复
嗯,是啊, 其实三层的好处也是在于 代码可以更加统一,相似的代码都放在一块,需要修改的时候,方便操作! 其次,也是可以省下好多编写相同重复的代码的操作!

特别是在企业的信息管理平台 ,这样的有好多代码都是需要相互可以调用,读取等操作的, 有了用三层的模式,即减少了代码的重复编写,也 把相同的代码放一起,可以分开用于修改的操作,方便!

如果说 在修改BUB的时候, 其实不一定每个层都要修改的,主要是看修改的任务, 把 各层的任务划分好,就可以知道, 修改的时候都是需要修改哪些层了.
T13yiyong 2009-01-02
  • 打赏
  • 举报
回复
楼主你自己刚刚也点到了三层的优势和劣势啦。 如果是二期开发,假如你没分层,看代码是不是费时费力啊, 如果是三层就很清晰啊。
aJava Coder 2009-01-02
  • 打赏
  • 举报
回复
我也在学习,UP 一下!!
liberpc 2009-01-02
  • 打赏
  • 举报
回复
先看看吧
-无-为- 2009-01-02
  • 打赏
  • 举报
回复
在设计思想及架构上也只算是一层架构,也就是在aspx.cs文件中直接写数据访问及业务代码,唯一的封装只有一些常用数据库操作及工具类。自己知道,这样的东西基本拿不上台面
lz, 我也是如此。。。。。
o(∩_∩)o...
wowufeng 2009-01-02
  • 打赏
  • 举报
回复
摘抄的一段

层式结构究竟其优势何在?Martin Fowler在《Patterns of Enterprise Application Architecture》一书中给出了答案:
1、开发人员可以只关注整个结构中的其中某一层;
2、可以很容易的用新的实现来替换原有层次的实现;
3、可以降低层与层之间的依赖;
4、有利于标准化;
5、利于各层逻辑的复用。

概括来说,分层式设计可以达至如下目的:分散关注、松散耦合、逻辑复用、标准定义。

一个好的分层式结构,可以使得开发人员的分工更加明确。一旦定义好各层次之间的接口,负责不同逻辑设计的开发人员就可以分散关注,齐头并进。例如UI人员只需考虑用户界面的体验与操作,领域的设计人员可以仅关注业务逻辑的设计,而数据库设计人员也不必为繁琐的用户交互而头疼了。每个开发人员的任务得到了确认,开发进度就可以迅速的提高。

松散耦合的好处是显而易见的。如果一个系统没有分层,那么各自的逻辑都紧紧纠缠在一起,彼此间相互依赖,谁都是不可替换的。一旦发生改变,则牵一发而动全身,对项目的影响极为严重。降低层与层间的依赖性,既可以良好地保证未来的可扩展,在复用性上也是优势明显。每个功能模块一旦定义好统一的接口,就可以被各个模块所调用,而不用为相同的功能进行重复地开发。

进行好的分层式结构设计,标准也是必不可少的。只有在一定程度的标准化基础上,这个系统才是可扩展的,可替换的。而层与层之间的通信也必然保证了接口的标准化。

“金无足赤,人无完人”,分层式结构也不可避免具有一些缺陷:
1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。

xuStanly 2009-01-02
  • 打赏
  • 举报
回复
呵呵,如果只是一两万的小项目,老板们管它什么三层不三层呢,快完快收钱就成,
等项目做完了如果老板发现这个项目如果包装包装一下,比如换个数据库,扩充些功能什么的能够卖到一二十万,
那么程序员就倒霉了,不分层基本上就得重写,还要天天加班,
再后来老板发现如果把这个系统做成B/S(或者C/S)可以卖到一两百万,
我估计程序员得吐血了。
CSDN上有些大侠说得好,分层、继承、接口什么的并不是着眼于现在,而是未来,可扩充性、可维护性等,
对于程序员来说也是水平进阶的必由之路。
peng_weida 2009-01-02
  • 打赏
  • 举报
回复
up
diudiu121 2009-01-02
  • 打赏
  • 举报
回复
其实无所谓几层,最终的目标是要达到:安全稳定、性能高效、易维护就OK了;即使写到4,5.。。。层,不安全,不好维护的话,一样白瞎。
bj890 2009-01-02
  • 打赏
  • 举报
回复
up
  • 打赏
  • 举报
回复
楼主看看把,肯定有好处的
  • 打赏
  • 举报
回复
和我以前的一样 、

当你遇到困难的时候可能就知道好处了,最近正在研究petshop
steden 2009-01-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 winner2050 的回复:]
-_-!

其实你已经知道了。
[/Quote]
加载更多回复(6)

62,046

社区成员

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

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

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

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