【程序设计】MVC模式与三层架构

概述

  • 从广义上来说,MVC模式与三层架构是没有联系的,但是在三层架构中,表示层通常会使用MVC模式进行构建。
  • 经常使用的MVC框架有Spring MVC、Struts等。

系统架构

指整合应用系统程序大的结构。

早期计算机行业没有这个概念,随着互联网的兴起,微软在C#上市的一年(05年)提出这一词,利用petsshop做了一个案例介绍三层架构,自此有了架构的概念。

系统间的复杂度=系统间的耦合度:系统架构均是为了降低系统模块间的耦合度。

高内聚,低耦合

  • 一个类只做一件事
    比如日期管理工具类不应该出现四则运算相关的事,这是数学工具类的事,体现了最少知识原则。
  • 一个方法只做一件事
    体现了单一职责原则。
  • 写只写一次

MVC

  • 是一种设计模式,它分离了表现与交互。
  • MVC模式是应用于三层架构中视图层的模式。

三个核心部件

  • Model(模型)
    • 承载数据,并对用户提交请求进行计算的模块
    • 位于最底下的一层
    • 是应用程序中用于处理应用程序数据逻辑的部分,通常负责在数据库中存取数据。
    • 模型分两种:
      • 数据模型(数据承载Bean):指实体类(Entity),专门用于承载业务数据的,如Student、User等。
      • 业务模型(业务处理Bean):指Service或Dao对象, 专门用于处理用户提交请求的。业务处理模型将视图层与三层架构联系起来。
  • View(视图)
    • 为用户提供使用界面,与用户直接进行交互
    • 位于最上面的一层
    • 是应用程序中处理数据显示的部分,通常是依据模型数据创建的。
    • 所有界面都是视图,不光是html,桌面应用也是视图,移动应用,如手表,手机,包括电视等都是视图,因为那里有交互。
  • Controller(控制器)
    • 用于将用户请求转发给相应的Model进行处理,并根据Model的计算结果向用户提供相应响应
    • 位于中间的一层
    • 是应用程序中处理用户交互的部分,通常负责从视图读取数据,控制用户输入,并向模型发送数据。
    • 处理请求做分发。

MVC架构程序的工作流程

  1. 用户通过View页面向服务端提出请求,可以是表单请求、超链接请求、AJAX请求等。
  2. 所有的终端用户请求被发送到控制器。
  3. 服务端的Controller控制器接在收到请求后对请求进行解析,找到相应的Model对用户请求进行处理
  4. Model处理后,将处理结果再交给Controller。
  5. Controller在接到处理结果后,根据处理结果找到要向客户端发回的响应页面(View)
  6. 页面经渲染(数据填充)后发送给客户端。

优点

1. 耦合性低
由于运用MVC的应用程序的三个部件是相互独立,改变其中一个不会影响其它两个,所以依据这种设计思想能构造良好的松耦合的构件。
2. 重用性高
因为MVC模式允许使用不同样式的视图来访问同一个服务器端的代码,而模型返回的数据没有进行格式化,这样应用于模型的代码只需写一次就可以被多个视图重用,所以实现了最大化地重用代码。
3. 成本低
MVC模式使开发和维护用户接口的技术含量降低。
4. 部署快
使用MVC模式使开发时间得到很大的缩减,它使程序员集中精力于业务逻辑或表现形式上。
5. 可维护性高
分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。

缺点

1. 没有明确的定义
要完全理解MVC并不是很容易,而且模型和视图的严格分离也给调试应用程序带来了一定的困难,每个构件在使用之前都需要经过彻底的测试。
2. 不适合中小规模的应用程序
花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。
3. 增加系统结构和实现的复杂性
对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
4. 视图与控制器间的过于紧密的连接
视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
5. 视图对模型数据的低效率访问
依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
6. 一般高级的界面工具或构造器不支持该模式
为适应MVC需要,改造这些工具和建立分离部件的代价是很高的,会造成MVC使用的困难。

MVC举例

  • 最典型的MVC就是JavaBean+Serlvet+JSP模式
    最开始用Servlet(服务器小程序)开发,Servlet既要处理业务逻辑,又要处理页面展示。
    后来出现JSP(Java Server Page,Java服务器页面)处理页面展示,因为JSP就是Servlet,所以JSP也可以使用脚本<%%>处理业务逻辑,但是为了降低耦合度所以不用。
    JSP能把Servlet分离出来,所以它是一门技术,类似于C#(.net)的aspx:.net是开发平台,C#则是.net开发平台的一门程序设计语言,.net开发平台还可以用vb、js、C/C++等语言进行开发,.net平台提供了很多API,可以把它理解成CPU,它提供了很多指令,它的指令可以供外部调用从而组成一个程序、一个软件。
    类似相应的关系:Java与.jsp、C#与.aspx、PHP与.php
    • JavaBean作为模型,既可以作为数据模型来封装业务数据,又可以作为业务逻辑模型来包含应用的业务操作。其中,数据模型用来存储或传递业务数据,而业务逻辑模型接收到控制器传过来的模型更新请求后,执行特定的业务逻辑处理,然后返回相应的执行结果。
    • JSP作为表现层,负责提供页面为用户展示数据,并在适当的时候向控制器发出请求,请求模型进行更
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值