自定义MVC架构【上】(一)

简介: 自定义MVC架构【上】

一、前言

1.什么是MVC架构

MVC架构(Model-View-Controller),即模型-视图-控制器架构,是一种常见的软件设计模式,用于组织和分离应用程序的不同组成部分。

  • 模型(Model):表示应用程序中的数据和业务逻辑。模型负责处理数据的读写、验证、计算等操作,以及处理与数据相关的业务逻辑。模型通常不直接与用户界面交互,而是通过控制器来获取和更新数据。
  • 视图(View):表示应用程序中的用户界面。视图负责展示数据给用户,并接收用户的输入。视图通常不包含任何业务逻辑,而是通过控制器来更新和获取数据。一个模型可以有多个视图,视图可以是不同形式的展现,如网页、移动应用界面等。
  • 控制器(Controller):负责处理用户输入、控制应用程序的流程,以及协调模型和视图之间的交互。控制器接收用户的输入并相应地更新模型和视图。它将用户的操作转化为对模型的请求或对视图的更新,以实现数据和界面的交互。

2.使用MVC架构的好处

MVC架构的优势在于它能够实现良好的代码复用性、可扩展性、可维护性和可测试性。通过将应用程序的不同职责分离,使得各个组成部分独立变化,降低了耦合度,同时也使得开发团队能够更好地协作和管理项目。

生活案例:

假如有一家餐馆,只有老板一个人。采购、服务客人、炒菜、上菜、结账,都是老板来做,是不是很费时费力, 如果他招聘人员,来为他做这些事情是不是就大大节省了时间,而且我们一件事情对应一个人,某个环节出了问题都好直接对接。

项目案例:

餐馆就是我们的项目,jsp页面就是老板,什么事情都是他来干,代码量是非常大的而且不利于维护,这时候我们就要进行 “分类管理”将我们的代码变成MVC架构MVC就是模型(model)-视图(view)-控制器(controller)。它们各自处理自己的任务,高内聚低耦合, 提升我们写代码的效率以及后期维护等。

3.MVC架构与三层架构的区别

1. 三层架构是基于业务逻辑来分的,而MVC是基于页面来分的;

2. 三层是种软件架构,通过接口实现编程,MVC模式是一种复合设计模式,一种解决方案;

3. 三层架构模式是体系结构模式,MVC是设计模式;

4. 三层架构模式又可归于部署模式,MVC可归于表示模式。

注意MVC架构和三层架构并不是互斥的,可以根据实际需求进行组合和调整。例如,可以将MVC架构作为表示层的一部分,用于管理用户界面的交互,同时在业务逻辑层和数据访问层中采用三层架构划分职责。

4.MVC架构的思路

如图所示,视图负责展示模型中的数据给用户,并提供用户界面,用于与用户进行交互,发送请求到Servlet也就是控制器,控制器通过接收用户输入来控制应用程序的行为然后去到后端也就是数据访问层拿到相应数据后根据交互来更新模型和视图。

二、自定义MVC

版本迭代:我将带领大家一步一步演变成我们如今所用的MVC架构让大家更直观的感受到为什么要使用以及怎么演变而来的。

1.最初版本

版本一:一个请求参数(操作)对应一个servlet

package com.xw.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 模拟版本一mvc新增操作
 */
@WebServlet("/BookAdd.do")
public class BookAddServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request, response);
  }
  @Override
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("我是版本一的mvc__新增操作。。。");
  }
}

不足之处:像以上的servlet要写多遍,一个操作就要写一个servlet,非常的繁琐而且不利于维护。

2.进阶版

版本二:增删改查都是一个Servlet,在Servlet里面进行if操作判断
package com.xw.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 模拟版本二mvc增删改查共用一个Servlet操作
 */
@WebServlet("/BookCRUD.do")
public class BookCRUDServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request, response);
  }
  @Override
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //接收请求参数
    String parameter = request.getParameter("CrudName");
    //判断前端传递过来的是什么参数
    if(parameter.equals("add")) {
      add(request,response);
    }else if(parameter.equals("upd")) {
      upd(request,response);
    }else if(parameter.equals("del")) {
      del(request,response);
    }else if(parameter.equals("list")) {
      list(request,response);
    }
  }
  private void list(HttpServletRequest request, HttpServletResponse response) {
    System.out.println("我是版本二的查询");
  }
  private void del(HttpServletRequest request, HttpServletResponse response) {
    System.out.println("我是版本二的删除");
  }
  private void upd(HttpServletRequest request, HttpServletResponse response) {
    System.out.println("我是版本二的修改");
  }
  private void add(HttpServletRequest request, HttpServletResponse response) {
    System.out.println("我是版本二的新增");
  }
}

不足之处:虽然只需要写一个servlet,但是每增加一个操作就要增加一个if条件分支,如果我们的操作需求多了起来代码量也是非常冗余的。

相关文章
|
1月前
|
存储 前端开发 调度
Flux 与传统的 MVC 架构模式区别
Flux是一种用于构建用户界面的架构模式,与传统的MVC架构不同,它采用单向数据流,通过Dispatcher统一管理数据的分发,Store负责存储数据和业务逻辑,View只负责展示数据,使得应用状态更加可预测和易于维护。
|
4月前
|
设计模式 前端开发 数据库
哇塞!Rails 的 MVC 架构也太牛了吧!快来看看这令人惊叹的编程魔法,开启新世界大门!
【8月更文挑战第31天】《Rails中的MVC架构解析》介绍了Ruby on Rails框架核心的MVC设计模式,通过模型(Model)、视图(View)和控制器(Controller)三部分分离应用逻辑,利用Active Record进行数据库操作,ERB模板渲染视图,以及控制器处理用户请求与业务逻辑,使代码更易维护和扩展,提升团队开发效率。
81 0
|
1月前
|
存储 前端开发 数据可视化
在实际项目中,如何选择使用 Flux 架构或传统的 MVC 架构
在实际项目中选择使用Flux架构或传统MVC架构时,需考虑项目复杂度、团队熟悉度和性能需求。Flux适合大型、高并发应用,MVC则适用于中小型、逻辑简单的项目。
|
2月前
|
前端开发 Java 数据库
springBoot:template engine&自定义一个mvc&后端给前端传数据&增删改查 (三)
本文介绍了如何自定义一个 MVC 框架,包括后端向前端传递数据、前后端代理配置、实现增删改查功能以及分页查询。详细展示了代码示例,从配置文件到控制器、服务层和数据访问层的实现,帮助开发者快速理解和应用。
|
3月前
|
设计模式 前端开发 数据库
理解mvc架构
mvc架构
33 4
|
4月前
|
设计模式 存储 前端开发
MVC革命:如何用一个设计模式重塑你的应用架构,让代码重构变得戏剧性地简单!
【8月更文挑战第22天】自定义MVC(Model-View-Controller)设计模式将应用分为模型、视图和控制器三个核心组件,实现关注点分离,提升代码可维护性和扩展性。模型管理数据和业务逻辑,视图负责数据显示与用户交互,控制器处理用户输入并协调模型与视图。通过示例代码展示了基本的MVC框架实现,可根据需求扩展定制。MVC模式灵活性强,支持单元测试与多人协作,但需注意避免控制器过度复杂化。
47 1
|
4月前
|
开发者 前端开发 Java
架构模式的诗与远方:如何在MVC的田野上,用Struts 2编织Web开发的新篇章
【8月更文挑战第31天】架构模式是软件开发的核心概念,MVC(Model-View-Controller)通过清晰的分层和职责分离,成为广泛采用的模式。随着业务需求的复杂化,Struts 2框架应运而生,继承MVC优点并引入更多功能。本文探讨从MVC到Struts 2的演进,强调架构模式的重要性。MVC将应用程序分为模型、视图和控制器三部分,提高模块化和可维护性。
49 0
|
4月前
|
存储 前端开发 数据库
神秘编程世界惊现强大架构!Web2py 的 MVC 究竟隐藏着怎样的神奇魔力?带你探索实际应用之谜!
【8月更文挑战第31天】在现代 Web 开发中,MVC(Model-View-Controller)架构被广泛应用,将应用程序分为模型、视图和控制器三个部分,有助于提高代码的可维护性、可扩展性和可测试性。Web2py 是一个采用 MVC 架构的 Python Web 框架,其中模型处理数据和业务逻辑,视图负责呈现数据给用户,控制器则协调模型和视图之间的交互。
41 0
|
5月前
|
存储 前端开发 算法
MVC(Model-View-Controller)架构
MVC架构帮助开发者构建清晰、可维护和可扩展的Web应用程序。
42 2
|
4月前
|
中间件 API 网络架构
Django后端架构开发:从匿名用户API节流到REST自定义认证
Django后端架构开发:从匿名用户API节流到REST自定义认证
46 0