层次系统时按层次组织的。每层都为其上面的的层提供服务,并充当下面层的客户。
拓扑限制:交互仅仅在相邻层进行。(不允许隔层调用,不允许有相反方向的调用)
层次架构的优点:
- 支持基于逐层增加的抽象级别的设计
- 对一层功能的更改最多影响其他两层
- 支持复用
层次架构的缺点:
- 并不是所有的系统都能很容易地以分层的方式构建
- 即使一个系统在逻辑上可以分层,性能方面的考虑也可能需要高层函数与其更低级的实现函数直接的紧密耦合
- 可能很难找到正确的抽象层次
三层架构:
三层客户端-服务器架构
我们讨论的是通用三层架构
表示层(Persentation layer):
- 通常包括用户图形界面,用于用户输入,用户请求与显示用户请求的返回结果等。
- 表示层还会调用应用层的组件的过程,函数或者方法。但是反过来不会。
应用层(Application layer):
- 主要包括应用的业务逻辑,实现了应用的商业功能
- 如果要访问数据库或者将程序运行中产生的数据存储到数据库,必须调用永久数据存储层的相应的数据库访问方法,不能直接访问数据库。
永久数据存储层:(Permanent Data Storage layer)
- 包含数据库的访问与将永久数据存储到数据库里的能力
- 不能调用应用层与显示层,只能将结果返回给它们。
MVC模式架构
Model:
- 负责从数据库中提取数据,将数据存储到data store
- 负责业务逻辑的实现
- 负责数据验证,然后将数据存入数据库
View:
- 捕捉用户的输入
- 向controller分发处理请求
- 显示输出
- 一个model可能有多个View
Controller:
- 接受来自客户的请求
- 调用model业务逻辑方法
- 调用view显示执行结果
三层层次架构与MVC架构的比较
相似之处:
- 都是三个部分组成
- 显示层与View类相似
- 应用层与Model类相似
区别:
- 各个模块之间的调用关系不同:三层架构的交互是线性的,MVC的交互是三角形
- 对数据库的访问不同:三层架构指定一个永久数据访问层,所有数据库的访问均由此层承担。MVC一般由Model直接访问,也有可能是Controller直接访问。
- 控制模块:MVC里有专门的Controller模块,三层架构没有,它们一般在应用层内部写一个类似的控制模块。