天天看点

JavaWeb三层架构的理解/三层架构的优缺点/三层架构与MVC的区别

1、三层架构

我们的开发架构一般都是基于两种形式,一种是C/S架构,也就是客户端/服务器,另一种是B/S架构,也就是浏览器服务器。在JavaEE开发中,几乎全都是基于B/S架构的开发。那么在B/S架构中,系统标准的三层架构从上至下分别包括:表现层、业务层、持久层。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。三层架构在我们的实际开发中使用的非常多。

三层架构中,每一层各司其职,接下来我们就说说每层都负责哪些方面:

  • 表现层:
    • 表现层也称为界面层,位于最外层(最上层),离用户最近。也就是我们常说的web层。
    • 它负责接收客户端请求,向客户端响应结果,通常客户端使用http协议请求web层,web需要接收http请求,完成http响应。
    • 表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。
    • 表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。
    • 表现层的设计一般都使用MVC模型。(MVC是表现层的设计模型,和其他层没有关系)
  • 业务层:
    • 也就是我们常说的 service层。它负责业务逻辑处理(主要是从数据库中得到数据然后对数据进行逻辑处理),和我们开发项目的需求息息相关。
    • web层依赖业务层,但是业务层不依赖web层。
    • 业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致性。(也就是我们说的,事务应该放到业务层来控制)
    • 业务层在体系架构中的位置很关键,它处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对于上层而言是“无知”的,改变上层的设计对于其调用的底层而言没有任何影响。如果在分层设计时,遵循了面向接口设计的思想,那么这种向下的依赖也应该是一种弱依赖关系。业务层的设计对于一个支持可扩展的架构尤为关键,因为它扮演了两个不同的角色。对于数据访问层而言,它是调用者;对于表示层而言,它却是被调用者。依赖与被依赖的关系都纠结在业务层上,如何实现依赖关系的解耦,则是除了实现业务逻辑之外留给设计师的任务。
  • 持久层:
    • 也就是我们是常说的dao层。负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进行持久化的载体,数据访问层是业务层和持久层交互的接口,业务层需要通过数据访问层将数据持久化到数据库中。通俗的讲,持久层就是和数据库交互,对数据库表进行增删改查的。
    • 采用DAO模式,建立实体类和数据库表映射(ORM映射)

在三层中JSP与Servlet代码都属于表现层,业务逻辑层则是完成业务规则的实体类,数据访问层则是JDBC等代码。

2、三层架构的优缺点

优点:

  • 开发人员可以只关注整个结构中的其中某一层;
  • 可以很容易地用新的实现来替换原有层次的实现;
  • 可以降低层与层之间的依赖;
  • 有利于标准化;
  • 利于各层逻辑的复用。
  • 结构更加的明确
  • 在后期维护的时候,极大地降低了维护成本和维护时间

三层架构把不同层的业务职责分离得更加彻底,逻辑层不包含一丁点的视图层代码,同样的数据层也不应该包含一丁点的逻辑层代码,符合低耦合的思想。

三层架构更好地实现了模块化编程,使用三层架构设计的系统更容易扩展、更换,特别是如今不止pc端一种设备,如果没做好分层就无法适应多设备的访问。例如表示层我们使用jsp+Servlet做的,面向的是web,如果哪天不做web了,要把整个表示层更换成桌面的图形化来显示,那么使用了三层架构的话,只需要更换表示层即可,业务逻辑层和数据层都可以进行复用。如果没有进行分层的话,各个模块都耦合在一起就无法进行复用,只能重新再编写一个适应桌面的系统出来,这样就很耗时耗力了。

我们都知道WebService是一种跨编程语言和跨操作系统平台的远程调用技术,如果一个系统是使用三层架构进行设计的,那么逻辑层就可以通过WebService共享给其他不同语言编写的应用程序调用。

缺点:

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

3、三层架构与MVC的区别

  • 很多人容易把三层架构与MVC模式混淆,三层与MVC的最不同的地方在于三层是没有Controller控制器的概念。虽然同样是架构级别的,三层与MVC 相同的地方在于他们都有一个表现层,但是他们不同的地方在于其他的两个层。MVC没有把业务的逻辑访问看成两个层,这是采用三层架构或MVC搭建程序最主要的区别。当然了,在三层中也提到了Model概念,但是三层架构中Model的概念与MVC中Model的概念是不一样的,“三层” 中典型的Model层是以实体类构成的,而MVC里,则是由业务逻辑与访问数据组成的。
  • 三层是基于业务逻辑来分的;而MVC是基于页面来分的。

    三层是种软件架构,通过接口实现编程;MVC模式是一种复合设计模式,一种解决方案。

    三层模式是体系结构模式;MVC是设计模式。

    三层模式又可归于部署模式;MVC可归于表示模式。

继续阅读