三层架构(3-tier application)通常意义上的三层架构就是将整个业务应用划分为:
表现层(UI),逻辑层(BLL),数据访问层(DAL).
其三层系统的分层结构如图所示:
DAL(Data Access Layer) --数据访问层
DAL:主要是对原始数据的操作层,而不是对原始数据,换句话说,是对数据的操作,而
不是数据库,具体为业务逻辑层或表示层提供数据服务.简单的说法就是实现对数据表的
Select,Insert,Update,Delete的操作.
数据访问层:有时候也称为持久层,其功能主要是负责数据库的访问,可以访问数据
库系统,二进制文件,文本文档或是XML文档.
主要是看你的数据层里面有没有包含逻辑处理,实际上它的各个函数主要完成各个对
数据文件的操作,而不必管其他操作.
DAL的作用:
1.从数据源加载数据(Select)
2.向数据源写入数据(Insert/update)
3.从数据源删除数据(Delete)
DAL中常用的技术:
1.ADO.NET+SQL语句
2.O/R Mapping框架
3.访问SQL Server数据库时Linq to SQL
UI(user interface)---显示层
UI:展示给用户的界面,即用户在使用一个系统的时候他的所见所得.
UI作用:
向用户展现特定业务数据
采集用户的输入信息和操作
UI主要对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问.
UI(最上层),离用户最近,用于显示数据和接收用户输入端数据,为用户提供一种交互式操作
的界面.
UI设计的原则:
用户至上,兼顾简洁
UI中常用的技术:
Windows Form:Form Control
ASP.NET:aspx,ascx,master,html
BLL(Business Logic Layer)---业务逻辑层
BLL:针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理,主要负责
对数据层的操作,也就是说把一些数据层的操作进行组合.
BLL的作用:
从DAL中获取数据,以供UI显示用
从UI中获取用户指令和数据,执行业务逻辑
从UI中获取用户指令和数据,通过DAL写入数据源
BLL无疑使系统架构中体现核心价值的部分,它关注点主要集中子啊业务规则的制定,
业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域逻辑有
关很多时候,也将业务逻辑层称为领域层.
业务逻辑层在体系架构中的位置很关键,它处于数据访问层与表示层中间,起到数据
交换中承上启下的作用.由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对上
层而言是无知的,改变上层的设计对其调用的狄成而言没有任何影响.如果在分层设计时,
遵循了面向对象的思想,那么这种向下的依赖也应该是一种弱依赖关系.因此在不改变接
口定义的前提下理想的分层式架构,应该是一个支持可抽取,可替换的"抽屉"式结构.正因
为如此,业务逻辑层的设计对于一个支持可扩展的架构尤为关键,因为它扮演了两个不同
的角色.对于数据访问层而言,它使调用层,对于表面层而言,它使被调用层者.依赖于别依赖
关系都纠结在业务逻辑层上.
BLL的职责机制:
UI->BLL->UI
UI->BLL->DAL->BLL->UI
BLL,DAL,UI都要添加Model引用
BLL添加DAL /Model引用
总结:
三层架构的优点:
1.开发人员可以只关注整个结构中的其中某一层
2.可以很容易的用新的实现来替换原有层次的实现
3.可以降低层与层之间的依赖
4.有利于标准化
5.利于各层逻辑的复用
6.结构更加的明显
7.在后期维护的时候,极大地降低了维护成本和维护时间
三层架构缺点:
1.降低了系统的性能。如果不采用分层结构,很多业务可以直接造访数据库。以此获取
相应的数据。如今却必须通过中间层来完成。
2.有时候会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表现层中需
要增加一个功能,为保证器设计符合分层式结构,可能需要子啊相应的业务逻辑层和数
据访问层中都增加相应的代码。
3.增加了开发成本。
三层架构具体应用--原则:
1.DAL只提供基本的数据访问,不包含任何业务相关的逻辑处理。
2.UI只负责显示和采集用户操作,不包含任何的业务相关的逻辑处理(拿来主义)
3.BLL负责处理业务逻辑.通过获取UI传来的操作指令,决定执行业务逻辑,在需要访问数据
源的时候直接交给DAL处理.处理完成后,返回必要数据给UI(UI->BLL->DAL->BLL->UI)
三层架构遵循的规则:
1.UI层只能是一个外壳,不能能包含任何BizLogi的过程
2.设计时应该从BLL出发,而不是UI出发,BLL层在API上应该实现所有BIZLogic,以面向对
象的方式。
3.不管数据层是一个简单的SQLHelpler也好,还是嗲有Mapping过的Classes也好,应该
在一定的抽象程度上做到关系无关。
4.不管使用COM+Enterprise Service,还是Remoting,还是WebServer之类的远程对象技术,
不管部署的时候是不是真的分别部署到不同的服务器上,最起码在设计时候要考虑,更
远的,还得考虑多台服务器通过负载均衡做集群。