Thanks to visit codestin.com
Credit goes to github.com

Skip to content

三层架构和 MVC 模式 #16

@qingquan-li

Description

@qingquan-li

转载自:https://my.oschina.net/u/1020238/blog/519767

1. 三层架构

三层架构(3-tier application)通常意义上的三层架构就是将整个业务应用划分为:表现层(User Interface,简称 UI )、业务逻辑层(Business Logic Layer,简称 BLL )、数据访问层(Data Access Layer,简称 DAL )。区分层次的目的即为了“高内聚,低耦合”的思想。

  • 表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
  • 业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
  • 数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。

表现层实现的代表作品是 Struts 框架,业务层实现的代表作品是 Spring ,持久层实现的代表作品是 Hibernate 。

举个例子:

持久层从持久库中取出-10。
业务层按照一定的逻辑(这里我们举例取温度的逻辑)翻译成-10摄氏度。
表示层显现给用户“哎呀,今天好冷!”。

层就相当于一个黑盒子,我们不用知道它内部怎么实现,只需要知道如何去调用它就行了。每层只与上下相邻的两层打交道。当一层内部由于技术变迁发生变化时,只要接口不变,其他层不用做任何改变。分层之后灵活性提高,也便于团队分工开发。

2. MVC

2.1 标准的 MVC(Model-View-Controller)

mvc

  • Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型(domain)或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据) 和 服务层(行为)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。
  • View(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。
  • Controller(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。 也就是说控制器做了个调度员的工作。

从图中我们还看到,在标准的 MVC 中模型能主动推数据给视图进行更新(观察者设计模式,在模型上注册视图,当模型更新时自动更新视图),但在 Web 开发中模型是无法主动推给视图(无法主动更新用户界面),因为在 Web 开发是请求-响应模型。

2.2 Web MVC

Web MVC 中的 M(模型)-V(视图)-C(控制器) 概念和标准 MVC 概念一样,我们再看一下 Web MVC 标准架构,如下图所示:

webmvc

在 Web MVC 模式下,模型无法主动推数据给视图,如果用户想要视图更新,需要再发送一次请求(即请求-响应模型)。

  • M(Model)模型:应用程序的核心功能,管理这个模块中用的数据和值;
  • V(View)视图:视图提供模型的展示,管理模型如何显示给用户,它是应用程序的外观;
  • C(Controller)控制器:对用户的输入做出反应,管理用户和视图的交互,是连接模型和视图的枢纽。

MVC 用于将 web(UI) 层进行职责解耦

3. 三层架构和 MVC 的区别与联系

MVC是 Model-View-Controller ,严格说这三个加起来以后才是三层架构中的 UI 层,也就是说,MVC 把三层架构中的 UI 层再度进行了分化,分成了控制器、视图、实体三个部分,控制器完成页面逻辑,通过实体来与界面层完成通话;而 C 层直接与三层中的 BLL 进行对话。

MVC 可以是三层中的一个表现层框架,属于表现层。三层和 MVC 可以共存。

三层是基于业务逻辑来分的,而 MVC 是基于页面来分的。

MVC 主要用于表现层,3层主要用于体系架构,3层一般是表现层、中间层、数据层,其中表现层又可以分成M、V、C,(Model View Controller)模型-视图-控制器 。


MVC是表现模式(Presentation Pattern)

三层架构是典型的架构模式(Architecture Pattern)

三层架构的分层模式是典型的上下关系,上层依赖于下层。但 MVC 作为表现模式是不存在上下关系的,而是相互协作关系。即使将 MVC 当作架构模式,也不是分层模式。MVC 和三层架构基本没有可比性,是应用于不同领域的技术。

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions