MVC模式和三层架构

Posted 碳烤小肥羊。。。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MVC模式和三层架构相关的知识,希望对你有一定的参考价值。

MVC模式和三层架构

MVC模式

  MVC(Model View Controller)是软件工程中的一种软件设计模式,它把软件系统分为模型、视图和控制器三个基本部分。用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

MVC 是一种分层开发的模式,其中:

  • M:Model,业务模型,处理业务,应用程序的核心功能,管理这个模块中用的数据和值(bean,dao)。
  • C:Controller,控制器,处理请求,调用模型和视图,对用户的输入做出反应,管理用户和视图的交互,是连接模型和视图的枢纽 (servlet/service)。
  • V:View,视图,界面展示,管理模型如何显示给用户,它是应用程序的外观(jsp/html)。

  控制器(serlvlet)用来接收浏览器发送过来的请求,控制器调用模型(JavaBean)来获取数据,比如从数据库查询数据;控制器获取到数据后再交由视图(JSP)进行数据展示。在这个过程中,控制器其实只是起到了承上启下的作用,它只负责中转(指挥调度),不负责具体的业务操作。

MVC 优点:

  • 职责单一,互不影响。每个角色做它自己的事,各司其职。
  • 有利于分工协作。
  • 有利于组件重用

MVC 缺点: 使得项目架构变得复杂,对开发人员要求高

三层架构

  三层架构(3-tier architecture) 是将我们的项目分成了三个层面,分别是 表现层(User Interface layer)业务逻辑层(Business Logic Layer)数据访问层(Data access layer)

区分层次的目的即为了高内聚低耦合的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。

  • 数据访问层:对数据库进行CRUD基本操作。
  • 业务逻辑层:对业务逻辑进行封装,组合数据访问层中基本功能,形成复杂的业务逻辑功能。例如 注册业务功能 ,我们会先调用 数据访问层selectByName() 方法判断该用户名是否存在,如果不存在再调用 数据访问层insert() 方法进行数据的添加操作。
  • 表现层:接收请求,封装数据,调用业务逻辑层,响应数据。

  而整个流程是,浏览器发送请求,表现层的Servlet接收请求并调用业务逻辑层的方法进行业务逻辑处理,而业务逻辑层方法调用数据访问层方法进行数据的操作,依次返回到serlvet,然后servlet将数据交由 JSP 进行展示。

三层架构的每一层都有特有的包名称:

  • 表现层: controller 或者 web
  • 业务逻辑层:service
  • 数据访问层:dao 或者 mapper

我们经常听到的SSM框架就是对不同层进行的封装:

三层架构优点

  1. 开发人员可以只关注整个结构中的其中某一层。
  2. 可维护性高,可扩展性高。
  3. 可以降低层与层之间的依赖。
  4. 有利于标准化。
  5. 利于各层逻辑的复用。

三层架构缺点

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

MVC与三层架构的联系

  如上图上半部分是 MVC 模式,上图下半部分是三层架构。 MVC 模式 中的 C(控制器)和 V(视图)就是 三层架构 中的表现层,而 MVC 模式 中的 M(模型)就是 三层架构 中的 业务逻辑层 和 数据访问层。

可以将 MVC 模式 理解成是一个大的概念,而 三层架构是对 MVC 模式实现架构的思想。 其实,无论是MVC还是三层架构,都是一种规范,都是奔着高内聚,低耦合的思想来设计的。

MVC与三层架构的异同

不同点

  • 三层架构是程序设计的一种典型架构方式,确立项目后首先做的是对其进行架构设计,三层架构就是把应用程序的分层,从而降低各个模块之间的耦合。而MVC是程序的一种设计模式,即应用程序确立架构后再根据需求决定是否要采用的一种模式, 是一种使程序代码变得条理、逻辑、通用的代码规范。因此二者的区别也就显现出来了,三层架构是一种架构方式而MVC是一种设计模式(或者说是一种设计思想)

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

相同点: MVC与三层架构虽然说实质是不同的,但在所达到的目的、所实现的效果是相同的,二者都是为了应用程序解耦,即使应用程序达到”高内聚,低耦合“的目的

MVC和三层架构

MVC和三层架构

标签(空格分隔): 架构 设计模式


三层架构

三层架构指的是: 视图层(View),服务层(Service)和持久层(DAO). 他们分别负责不同的功能.

单纯就是指后台的设计架构

这种架构模式是从微软来的, 微软提倡这种架构模式并且在 零几年的时候给了一个宠物商店的Demo 用于示范(有一点记不清了.).

  1. View层: 用于接收用户提交请求的代码.
  2. Service层: 系统的业务逻辑层主要在这里完成.
  3. DAO层: 直接操作数据库的代码.
  • 为了更好的降低各层次之间的耦合度, 在三层架构程序设计中, 采用面向抽象编程(接口编程). 即上层对下层的调用是通过接口实现的. 而下层对上层的真正服务提供者, 是下层接口的实现类. 服务标准(接口)是相同的, 服务提供者(实现类)可以替换, 这就实现了层间解耦合.

MVC模式

MVC指的是: Model(模型), View(视图)和Controller(控制器).

包括前台和后台, 这里省略了Service层. 其实自己写的话一般情况下经常把Service层省略掉, 设计好Controller和Model(控制器和数据库),然后开始设计前端交互.

  1. View:视图 最顶层, 为用户提供使用界面, 和用户直接进行交互, 是程序的外壳.
  2. Model:数据层 最底层, 是核心的数据层, 程序需要操作的数据或信息.
  3. Controller: 控制层 负责根据用户从View层输入的指令, 选取"数据层"中的数据, 然后对其进行相应的操作, 产生最终的结果.

  • MVC是一种软件设计典范, 用于中业务逻辑, 数据,页面实现分离的方法组织代码, 将业务逻辑整合到一个部件里面, 在改进和个性化定制界面以及用户交互的同时不需要重写编写业务逻辑, 实现业务逻辑和前端界面的分离. MVC被独特的发展起来用于映射传统的输入,处理和输出功能在一个逻辑的图形化用户界面的结构.
  • MVC最开始是用于桌面程序当中, M指的是业务模型, V指的是用户界面, C指的是控制器. 使用MVC设计模式的目的是 在桌面应用程序软件将MV分离, 之前的设计模式都是, 将数据从数据库中取出之后直接开始渲染界面, 如果中间加上Controller层, 我们可以让Model只负责和数据库进行交互操作, Controller负责处理数据 这样可以实现较多的代码复用, 减少代码冗余和降低耦合性.
  • 提高开发速度, 采用并发开发的模式, 在不依赖业务逻辑的情况下专注于视图设计. 反之亦然.

框架和设计模式的区别

  • 框架和设计模式混淆, 认为MVC是一种设计模式. 实际上框架和设计模式是完全不同的概念.
  1. 框架: Spring(MVC),Django(MTV).
  2. 设计模式: 工厂模式,适配器模式,策略模式.
  • 框架注重的是代码重用, 而设计模式注重的是设计重用, 架构介于两者之间,部分代码重用,部分设计重用,有时分析也可以重用. 在软件生产中有三种级别的重用: 内部重用,即在同一应用中能为公共使用的抽象块; 代码重用: 即将通用模块组合成库或者工具集, 以便在多个领域和应用都能使用;应用框架的重用,即为专业领域提供通用的或者现成的基础结构, 以获得最高级别的重用性.
  • 框架和设计模式虽然相似, 但是却有最根本的区别. 设计模式是在某种特定的环境中反复出现的问题以及解决该问题的方案的描述, 它比框架更加的抽象; 框架可以用代码表示, 也能直接执行或者复用, 而对设计模式而言只有实例才能用代码表示, 设计模式是比框架更小的元素, 一个框架中含有一个或者多个设计模式, 框架总是针对某一个特定领域,但设计模式却可以针对各种应用领域.可以说框架是软件,设计模式是软件的知识.

框架是大智慧, 用来对软件设计进行分工. 设计模式是小技巧, 对具体的问题提出具体的解决方案, 提高代码的复用率降低耦合度.


  • 所有的设计模式和架构, 基本上都是为了高内聚低耦合,提高开发速度之用.

以上是关于MVC模式和三层架构的主要内容,如果未能解决你的问题,请参考以下文章

MVC和三层架构

Javaweb的MVC模式和三层架构(框架了解)

三层架构 是设计模式吗

MVC开发模式和三层架构

MVC和三层架构的区别

MVC模式与三层架构的区别