典型模式
image.png
拓扑限制:交互仅仅在相邻层进行

  • 不允许隔层调用
  • 不允许有相反方向的调用

典型应用领域

  • 层次通讯协议
  • 数据库系统
  • 操作系统
  • 应用程序

    优点

  • 支持逐层抽象

  • 支持更新
  • 支持复用

    缺点

  • 并非所有的系统都是分层的。

    • 即使系统在逻辑上可以分层结构,考虑性能可能需要在
      • 逻辑高级函数及其
      • 较低层次的实现。
    • 可能很难找到正确的抽象层次。

      三层架构

      是近年来经常使用的软件体系结构。该体系结构可以分为通用的**3**层架构与运行在互联网上的三层架构软件。
  • 运行在互联网上的三层架构被称为三层客户端-服务器(3-tired Client/server)架构

  • 通用三层架构。本节要讲述的是通用的三层架构。

image.png
表示层**(Presentation layer):**

  • 表示层通常包括用户图形界面,用于用户输入、用户请求与显示用户请求的返回结果等。
  • 表示层调用应用层组件的过程,函数或者方法。但是应用层从来不会调用表示层的功能

应用层(Application layer):
或者称为业务逻辑(Business Logic)层。主要包括应用的业务逻辑,实现了应用的商业功能。

  • 该层的组件封装了应用的核心数据与功能。
  • 在该层中,如果要访问数据库或者要将程序运行中产生的数据存储到数据库,必须调用永久数据存储层的相应的数据库访问方法,而不能直接访问数据库

永久数据存储层(Permanent Data Storage layer):
该层包含数据库的访问与将永久数据存储到数据库中的功能。

  • 在Java实现中,该层包含了利用JDBC写的数据库访问代码。
  • 该层不能调用应用层与显示层,而只能将执行应用层的请求对数据库的访问结果返回给应用层。而应用层有可能将该数据返回给显示层。

image.png

三层体系结构与MVC体系结构的区别

  1. 各个模块之间的调用关系不同
    • 三层架构的一个根本原则是显示层不能直接越过应用层直接调用永久数据存储层的代码。首先显示层必须调用应用层,然后再由应用层的相关的方法转而调用永久数据存储层。不允许有相反方向的调用。因此,三层架构的交互是线性的;
    • MVC架构的程序组件之间的交互是三角形的:View对象发送更新给Controller对象,Controller对象更新Model对象,并且View对象直接地从Model对象得到更新。
  2. 对数据库的访问方式不同
    • 三层架构指定一个永久数据访问层,所有对数据库的访问均有此层承担;
    • MVC架构没有指定专门的数据库访问模块,一般的情况下是由Model直接访问数据库,但是也没有排除Controller中直接访问数据库的可能。
  3. 关于控制模块(Controller)
    • MVC架构中存在专门的Controller模块;
    • 而层次架构中通常没有这样专门的模块。事实上,很多设计者在层次架构中的应用层里面单独地指定一个类似的控制模块
  • 关于观察者模式在三层架构与MVC架构中的使用
    • 在三层架构中,可以在应用层与表示层之间,使用观察者模式:将应用层作为被观察者,将表示层作为观察者。其目的是一旦应用层的状态改变的时候,及时通知表示层,以便及时刷新用户图像界面。
      • 【注】在3层架构中,应用层与表示层之间,使用观察者模式。必然导致应用层对显示层的调用(notifyObservers())。这违反了层次架构的原则。但是考虑到采用观察者机制更新图形界面的效率,以上的小小的“违规”也是值得的。
    • 在MVC架构中,可以在Model与View之间使用观察者模式: Model作为被观察者, View作为观察者。一旦Model的状态改变的时候,及时通知View,以便及时刷新View。