三层架构,数据层(DAL)、逻辑层(BLL)、表示层(UI); 
三层结构的优点 
分层式结构究竟其优势何在?Martin   Fowler在《Patterns   of   Enterprise   Application   Architecture》一书中给出了答案: 
1、开发人员可以只关注整个结构中的其中某一层; 
2、可以很容易的用新的实现来替换原有层次的实现; 
3、可以降低层与层之间的依赖; 
4、有利于标准化; 
5、利于各层逻辑的复用。 
概括来说,分层式设计可以达至如下目的:分散关注、松散耦合、逻辑复用、标准定义。 
一个好的分层式结构,可以使得开发人员的分工更加明确。一旦定义好各层次之间的接口,负责不同逻辑设计的开发人员就可以分散关注,齐头并进。例如UI人员只需考虑用户界面的体验与操作,领域的设计人员可以仅关注业务逻辑的设计,而数据库设计人员也不必为繁琐的用户交互而头疼了。每个开发人员的任务得到了确认,开发进度就可以迅速的提高。 
松散耦合的好处是显而易见的。如果一个系统没有分层,那么各自的逻辑都紧紧纠缠在一起,彼此间相互依赖,谁都是不可替换的。一旦发生改变,则牵一发而动全身,对项目的影响极为严重。降低层与层间的依赖性,既可以良好地保证未来的可扩展,在复用性上也是优势明显。每个功能模块一旦定义好统一的接口,就可以被各个模块所调用,而不用为相同的功能进行重复地开发。 
进行好的分层式结构设计,标准也是必不可少的。只有在一定程度的标准化基础上,这个系统才是可扩展的,可替换的。而层与层之间的通信也必然保证了接口的标准化。 
如果是一个考试系统,考试合格的最低分数线要改,只需要修改业务逻辑相对应函数就可以了,只要此函数的入口参数和返回内容不变,在客户端不需作任何改动。在这里,看到了面向对象编程的特性之一封装性的优点,而这一点在开发大型应用时尤其有用,可以把开发人员分成两组,一组负责开发界面层,另一组负责开发商业逻辑层,双方只要按照事先商定的函数接口,并行地开发就可以,而不必向从前那样,后面的工作必须等前面的工作完成后才能开始。当然,这样的开发模式需要很好的项目协调和文档作支持。 
如果现在用的系统是SQL   SERVER数据库,由于各种原因要更改用ORACLE。如果不是三层结构系统的话,可能需要改很多代码,延长了开发周期。现在使用了三层结构,只要在加一个Oracle的数据访问层。这样就可以实现多数据库了。 
现在可能要做另外一个系统了,该系统也要对数据库进行操作。如果以前编写过,这样的一个数据层。只要把以前写的那个数据层拷贝过来就可以了。实现代码复用。从而减短了软件的开发周期了。 
三层结构的缺点 
“金无足赤,人无完人”,分层式结构也不可避免具有一些缺陷: 
1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。 
2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。 
基于组件的三层B/S结构概述 
在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或成为领域层)、表示层。 
三层结构原理 
3个层次中,系统主要功能和业务逻辑都在业务逻辑层进行处理。 
所谓三层体系结构,是在客户端与数据库之间加入了一个“中间层”,也叫组件层。这里所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S应用才是三层体系结构,三层是指逻辑上的三层,即使这三个层放置到一台机器上。   
三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过COM/DCOM通讯与中间层建立连接,再经由中间层与数据库进行交互。 表示层 
位于最外层(最上层),离用户最近。用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面 业务逻辑层 
业务逻辑层(Business   Logic   Layer)无疑是系统架构中体现核心价值的部分。它的关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域(Domain)逻辑有关,很多时候,也将业务逻辑层称为领域层。例如Martin   Fowler在《Patterns   of   Enterprise   Application   Architecture》一书中,将整个架构分为三个主要的层:表示层、领域层和数据源层。作为领域驱动设计的先驱Eric   Evans,对业务逻辑层作了更细致地划分,细分为应用层与领域层,通过分层进一步将领域逻辑与领域逻辑的解决方案分离。 
业务逻辑层在体系架构中的位置很关键,它处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对于上层而言是“无知”的,改变上层的设计对于其调用的底层而言没有任何影响。如果在分层设计时,遵循了面向接口设计的思想,那么这种向下的依赖也应该是一种弱依赖关系。因而在不改变接口定义的前提下,理想的分层式架构,应该是一个支持可抽取、可替换的“抽屉”式架构。正因为如此,业务逻辑层的设计对于一个支持可扩展的架构尤为关键,因为它扮演了两个不同的角色。对于数据访问层而言,它是调用者;对于表示层而言,它却是被调用者。依赖与被依赖的关系都纠结在业务逻辑层上,如何实现依赖关系的解耦,则是除了实现业务逻辑之外留给设计师的任务。 数据层 
数据访问层:有时候也称为是持久层,其功能主要是负责数据库的访问,可以访问数据库系统、二进制文件、文本文档或是XML文档。 
简单的说法就是实现对数据表的Select,Insert,Update,Delete的操作。如果要加入ORM的元素,那么就会包括对象和数据表之间的mapping,以及对象实体的持久化。

解决方案 »

  1.   

    这个问题每周都有人提,你到论坛里搜一搜,相关的帖子都看一遍,你就能理解个大概了。如楼上所说的,研究下PetShop4,能提升到一定高度。
      

  2.   

    http://www.cnblogs.com/pyt5208/archive/2006/11/17/563524.html
    此文很好,菜鸟必看~
      

  3.   

    恩 petshop4很好,层次很清晰
      

  4.   

    9楼写的很详细,petshop4.0有时候看起来太麻烦
      

  5.   

    已经有新的框架了就不要再绕圈子了,你可以到.net->Linq论坛上去看看,从Linq to SQL开始(尽管这个并不是比较好的ORM,但是它足以说明“三层”完全可以在一夜之间搞好)。
      

  6.   

    希望不要浪费时间在纯粹的理论学习上,动手去扩充那些架构,例如去编写 Linq Provider,去编写 membership provider,编写asp.net的数据双向绑定服务代码等等,去下载了 reflector 看看 asp.net 的page 类的 ProcessMainRequest(好像是这个名字) 和 Control 类的 AddControl 源代码 ...... 市面上教授asp.net的书籍和“教师”只有十分之一二的技术含量,asp.net注定马上就过时了(在silverlight坚定使用者看来),那剩下的80%技术真的就没有人想得起来了么?
      

  7.   

    每一层之间都要做到松耦合,比如在数据库迁移的时候,比如我们要吧sqlserver数据库迁移到oracel数据库,我们只需要修改数据层的代码,其他层代码可以不动