深入Web三层体系架构

就像是OSI说提出的网络七层协议模型用来规范与界定开放性的通行系统互连参考模型。在现代Web服务开发时,如何构建灵活可伸缩,扩展的Web体系架构,人们概括总结出一个比较成熟的模型,那就是Web的层次体系架构。

Web三层体系结构概念

3-tiers application

上图中为通用Web 3-tiers application architecture,从上到下主要职责:

  • Presentation Layer(表现层):用于用户接口的展示,以及用业务层的类和对象来“驱动”这些接口,对应的有视图JSP,HTML,等等
  • Business Logic Layer(业务逻辑层):用于访问数据层,从数据层取数据、修改数据以及删除数据,并将结果返回给表现层。
  • Data Access layer(数据访问层):改成封装对Data Souce的增添修改,对BLL层提供透明数据读写存储。

基于层次体系的优缺点:

优点

  • 是的开发人员可以只关注整个结构中的其中某一层,当然这里是在铺设界定好了各层接口的前提下;
  • 可以很容易的用新的实现来替换原有层次的实现,也就是各层间的服务透明性,层内部可以进行灵活的替换;
  • 可以降低层与层之间的依赖;
  • 有利于标准化,这里明确各层的职责范围,成为开发人员共同的背景语言,也利于各种技术接口的界定;
  • 利于各层逻辑的复用,Web的开发将会针对之前的案例灵活的复用已有的单元。

缺点

  • 降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成,本来是数据可以直接通过DataSource穿透到表现层,现在必须通过层次包装上下传递,牺牲了暂时的灵活性,实际上还是赢的了长远的灵活性。
  • 有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码,这也是在设计时需要注意的,如何在早期的模型架构阶段考虑周全来避免。

层次架构通用规则

  • Presentation Layer只能作为一个数据展现, 最好不要包含任何BLL或DAO的处理过程
  • 设计时最好先从BLL出发, 而不是PL出发. BLL层在API上应该实现所有Business Logic, 以面向对象的方式
  • DAL层最好能够最大化降低与Data Source 物理层的耦合,做到抽象程度上做到系统无关,以支持Data Source的环境更变与水平替换。
  • 三层架构中,不管使用COM+(Enterprise Service), 还是Remoting, 还是WebService之类的远程对象技术, 不管部署的时候是不是真的分别部署到不同的服务器上, 最起码在设计的时候要做这样的考虑, 更远的, 还得考虑多台服务器通过负载均衡作集群。

三层体系结构的细致深入

作为一个对三层体系的细化考量,一种细致的规划架构方案如下:

3-tier application extension by vanjor

这种是一种在实际应用中细化的架构模型

  • 配置初始化模块:对系统增加底层的配置初始化模块,所以上层的初始化,决策选择均可以通过底层配置来灵活更改,如日子的开启范围,数据库连接配置,数据库模式配置,以及模块的开启等等
  • Data Source部分:对数据物理存储包含很多方式,此处列举了DB与FS物理数据存储系统.
  • Data Access Layer: 部分依然是基于上层业务需求,对上层提供数据访问接口,屏蔽底层物理数据层细节
  • Business Logic Layer: 业务层着灵活的根据模块水平划分,最大化在层间垂直水平二维方向降低耦合度
  • Presentation Layer : 同样依据模块划分,建立在不用的BLL上
  • 系统的依赖关系已经变成了一个树形链结构,层见依赖关系明确,便于切割开发与发布部署,比如,如果只想对用户发布View A模块,或者是单独测试View A模块,web服务打包ear,war等,可以有如下打包方式:

make a individual release

通过依赖关系链,打包发布内容只包含所需要的模块,这样最大化达到灵活快捷,降低并检验系统内部的耦合度。

Web三层体系与MVC的异同

同样是架构级别的,相同的地方在于他们都有一个表现层,但是他们不同的地方在于其他的两个层。

在三层架构中没有定义Controler的概念。这是我认为最不同的地方。而MVC也没有把业务的逻辑访问看成两个层,这是采用三层架构或MVC搭建程序最主要的区别。当然了。在三层中也提到了Model,但是三层架构中Model的概念与MVC中Model的概念是不一样的,“三层”中典型的Model层是已实体类构成的,而MVC里,则是由业务逻辑与访问数据组成的。

MVC(模型Model-视图View-控制器Controller)是一种设计模式,我们可以用它来创建在域对象和UI表示层对象之间的区分。

总之在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或成为领域层)、表示层。

参考