自定义mvc框架

简介: 自定义mvc框架

1.什么是自定义mvc?

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计模式,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

MVC 把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。

MVC 的目标是将业务逻辑从用户界面的考虑中分离。这样,开发者就可以更容易地改变每一部分而不会影响其他。

 

2.自定义mvc架构

自定义MVC(Model-View-Controller)框架是一种能够帮助开发者构建和组织应用程序的软件框架,它基于MVC设计模式。

2.1 为什么要学习自定义MVC框架

自定义MVC框架的重要性主要体现在以下几个方面:

结构清晰:MVC框架将应用程序的不同部分进行了划分,使得代码的结构更加清晰和可读性更高。通过明确定义模型、视图和控制器的职责,可以使开发人员更容易理解和维护应用程序的代码。

可维护性:由于MVC框架使代码结构变得清晰,因此应用程序变得更容易维护。当需要进行修改或者添加新功能时,开发人员可以更加准确地找到和理解相关代码的位置,从而提高代码的可维护性。

可扩展性:MVC框架将应用程序的不同部分解耦,使得各个部分可以独立进行开发和测试。这意味着当需要添加新功能或者进行需求变更时,只需要修改相应的模型、视图或控制器,而不会对其他部分造成影响,从而提高了代码的可扩展性。

代码复用:通过合理使用MVC框架,可以将一些通用的代码逻辑封装在模型、视图或控制器中,从而实现代码的复用。例如,多个视图可以共享同一个模型来展示不同的数据,或者多个控制器可以共享同一个模型来处理相同的请求。这样可以减少冗余代码的编写,提高开发效率。

2.自定义MVC工作原理

 

开发者可以根据MVC模式自定义属于自己的MVC框架,并根据实际情况进行相应的优化和扩展。

3、自定义MVC实例流程

3.1自定义mvc开发流程

  👨‍💻 首先我给大家讲一个生活中的案例,假如我是一个施工人员,只有施工证才能进行施工。那么我要进行施工,每次都要经过施工点的门禁,门禁则根据施工证进行存档,通过了才能到达施工点,听从安排进行具体任务施工。

       那么这里的的施工人员就是一个个子控制器子类,必须要继承实现父类子控制器的执行方法,才有资格进行操作,而我们子控制器子类真正要实现功能,要每次都经过主控制器的控制过滤,才能到指定子类进行施工,分发任务的就是子控制器了。

3.2子控制器(老板:发布任务)

package com.xzs.formwork;
import java.lang.reflect.Method;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Action {
  public void execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
    // 获取methodName值,这里指前端点击功能传来的方法名
    String methodName = request.getParameter("methodName");
    /**
     * this--->BookAction/BlogAction/PermissionAction...可能是很多对象
     * 所以需要通过反射找到对象带request,response参数的methidName方法
     */
    Method m = this.getClass().getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
    m.setAccessible(true);
    // 动态调用其方法
    m.invoke(this, request, response);
  }
}

3.3子控制器的子类(打工人:执行任务):

package com.xzs.servlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.xzs.formwork.Action;
public class BookAction extends Action {
  public void query(HttpServletRequest req, HttpServletResponse resp) {
    System.out.println("查询的业务逻辑");
  }
  public void edit(HttpServletRequest req, HttpServletResponse resp) {
    System.out.println("修改的业务逻辑");
  }
  public void delete(HttpServletRequest req, HttpServletResponse resp) {
    System.out.println("删除的业务逻辑");
  }
  public void add(HttpServletRequest req, HttpServletResponse resp) {
    System.out.println("新增的业务逻辑");
  }
}

施工证就是 : public class BookAction extends Action, 如果我没有继承Action父类子控制器,我是没有这个方法的,那么就不能进行施工操作…

3.3主控制器(门禁)

package com.xzs.formwork;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.xzs.servlet.BookAction;
/**
 * Servlet implementation class DisPathServlet
 */
@WebServlet("*.action")
public class DisPathServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;
  //实例化集合作为储存
  private Map<String, Action> actionMap = new HashMap<String, Action>();
  @Override
  public void init() throws ServletException {
    /**
     * 初始化存值就是给每个施工员根据施工证进行存档:
     */
    actionMap.put("book", new BookAction());
  }
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    doPost(request, response);
  }
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    // http://localhost:8080/MVC_project/book.action?methodName=delete...
    /**
     * 获取请求路径
     */
    String uri = request.getRequestURI();
    // 截取book
    uri = uri.substring(uri.lastIndexOf("/") + 1, uri.lastIndexOf("."));
    // 通过截取后的key(url)在map集合中找到指定的类进行处理
    Action action = actionMap.get(uri);
    try {
      action.execute(request, response);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

3.4jsp界面

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
  <a href="${pageContext.request.contextPath }/book.action?methodName=add">增加</a>
  <a href="${pageContext.request.contextPath }/book.action?methodName=delete">删除</a>
  <a href="${pageContext.request.contextPath }/book.action?methodName=edit">修改</a>
  <a href="${pageContext.request.contextPath }/book.action?methodName=query">查询</a>
  <a href="${pageContext.request.contextPath }/book.action?methodName=load">回显</a>
</body>
</html>

最后的结果:

点击按钮:

4.总结:

学好编程先学会编程思想,分析流程才能提高效率,本篇只是简单的介绍及流程,自定义MVC框架主要是促进了代码的重用性、可维护性和可扩展性。将代码进行分离,明确定义它们的职责。因此可以更容易地进行单元测试和集成测试。此外,当某个组件需要变更时,也只需要修改该组件而不影响其他组件。

 


相关文章
|
2月前
|
前端开发 Java 程序员
从零基础手写Spring MVC框架,准备好进阶程序员了吗?
我们程序员大部分人都是野路子,不懂什么叫代码规范。写了一个月的代码,最后还得其他老司机花3天时间重构,相信大部分老司机都很头疼看新手的代码。
25 1
|
3月前
|
设计模式 前端开发 JavaScript
浅谈MVC、MVP、MVVM框架模式
浅谈MVC、MVP、MVVM框架模式
32 0
|
4月前
|
前端开发 数据库 Python
Python Web 开发: 解释 Django 框架的 MVC 架构是什么?
Python Web 开发: 解释 Django 框架的 MVC 架构是什么?
|
4月前
|
存储 前端开发 Java
Spring基础篇:MVC框架整合
Spring基础篇:MVC框架整合
|
3月前
|
Java 数据库连接 Maven
SSM框架整合:掌握Spring+Spring MVC+MyBatis的完美结合!
SSM框架整合:掌握Spring+Spring MVC+MyBatis的完美结合!
|
24天前
|
前端开发 安全 Java
使用Java Web框架:Spring MVC的全面指南
【4月更文挑战第3天】Spring MVC是Spring框架的一部分,用于构建高效、模块化的Web应用。它基于MVC模式,支持多种视图技术。核心概念包括DispatcherServlet(前端控制器)、HandlerMapping(请求映射)、Controller(处理请求)、ViewResolver(视图解析)和ModelAndView(模型和视图容器)。开发流程涉及配置DispatcherServlet、定义Controller、创建View、处理数据、绑定模型和异常处理。
使用Java Web框架:Spring MVC的全面指南
|
1月前
|
前端开发 JavaScript Java
MVC框架:SpringMVC(三)
MVC框架:SpringMVC
30 0
|
1月前
|
JSON 前端开发 JavaScript
MVC框架:SpringMVC(二)
MVC框架:SpringMVC
37 0
|
1月前
|
前端开发 Java 应用服务中间件
MVC框架:SpringMVC(一)
MVC框架:SpringMVC
60 0
|
2月前
|
前端开发 Java 数据库连接
认识Java中最常用的框架:Spring、Spring MVC、Spring Boot、MyBatis和Netty
Spring框架 Spring是一个轻量级的开源框架,用于构建企业级应用。它提供了广泛的功能,包括依赖注入、面向切面编程、事务管理、消息传递等。Spring的核心思想是控制反转(IoC)和面向切面编程(AOP)。
78 3