自定义MVC

简介: 自定义MVC

1.什么是MVC?

MVC是一种软件架构模式,它代表模型-视图-控制器(Model-View-Controller)。MVC模式用于将应用程序的不同组成部分分离,以便更好地管理和组织代码。


模型(Model)表示应用程序的数据和业务逻辑。它处理数据的存储、检索和更新,并提供使用这些数据的方法和接口。

视图(View)负责展示模型中的数据,通常是用户界面的一部分。它负责接收用户的输入,并将数据传递给控制器进行处理。

控制器(Controller)充当模型和视图之间的中介,接收用户的输入并解释其意图。它从视图接收输入,并更新模型的状态,然后将更新后的数据发送回视图进行展示。

通过将应用程序分为模型、视图和控制器三个部分,MVC模式可以实现代码的重用性、可维护性和可扩展性。它使不同的组成部分之间的协作变得更加清晰和简单,并促进了团队的分工合作。许多现代的Web框架和应用程序框架都采用了MVC模式来构建可靠和可伸缩的应用程序。


2.自定义MVC


自定义MVC是指在MVC(Model-View-Controller)架构基础上,根据具体需求和业务需求进行个性化的定制和扩展。通常,自定义MVC会根据特定的应用程序要求重新定义或扩展各个组件的角色和责任,以满足特定的需求。


在自定义MVC中,模型(Model)仍然负责处理数据和业务逻辑,视图(View)仍然负责展示数据。但是,控制器(Controller)可以有一些定制化的变化。控制器可能会根据具体需求进行调整,以适应特定的应用程序逻辑或用户交互。


自定义MVC的目的是根据具体需求对标准的MVC架构进行个性化的调整,以提高开发效率和代码可维护性。通过自定义MVC,可以更好地适应特定的业务流程和用户需求,并提供更好的灵活性和扩展性。


需要注意的是,自定义MVC仍然应该遵循MVC架构的基本原则和设计模式,即分离关注点、实现单一职责等。自定义MVC并不是完全替代MVC,而是在MVC基础上进行定制,以满足更具体的需求。每个自定义MVC实现可能都会有不同的特点和变化,具体的实现方式取决于具体的应用场景和需求。


3.自定义MVC的作用

自定义MVC架构具有以下几个用处:


1. 符合特定需求:通过自定义MVC架构,可以根据具体的应用需求和业务逻辑,定制化地调整模型、视图和控制器的角色和责任,以满足特定的功能和需求。这样可以构建更灵活、更高效的应用程序。


2. 提高可维护性:自定义MVC架构将代码划分为不同的组件,使不同的职责分离。这样可以降低代码之间的耦合度,减少代码的复杂性,使代码更加模块化和可维护。当需要进行修改或新增功能时,只需要关注特定的组件,而不影响其他部分的代码。


3. 增强可扩展性:通过自定义MVC架构,可以设计组件与模块之间的清晰接口,使得各个组件可以独立地进行扩展和升级。这样在应对不断变化的需求和业务逻辑时,可以更方便地进行扩展和调整,而不影响其他部分。


4. 提升代码的重用性:自定义MVC架构将不同的功能和职责分层划分,使得代码可以更好地复用。例如,通过模型和控制器的分离,可以在不同的视图中重复使用相同的模型和业务逻辑,从而提高代码的重用性和开发效率。


5. 支持团队合作:自定义MVC架构定义了清晰的角色和职责,使得团队成员可以在不同的组件上独立工作,降低协同开发的复杂性。每个成员可以专注于自己的任务,减少开发冲突,提高团队协作效率。


总的来说,自定义MVC架构能够根据具体需求和业务逻辑定制化地调整模型、视图和控制器的角色和责任,以提供更灵活、可维护、可扩展和可复用的代码结构。这样可以更好地适应应用程序的需求,并提高开发效率和代码质量。


4.自定义MVC架构与三层架构的区别

自定义MVC架构和三层架构是两种不同的架构模式,它们在组织方式、层次结构和关注的重点上存在一些区别。


组织方式:


自定义MVC架构:自定义MVC强调的是在模型、视图和控制器之间进行定制化的调整,根据具体需求和业务逻辑重组各个组件的角色和责任,以满足特定的需求。

三层架构:三层架构将应用程序分为表示层、业务逻辑层和数据访问层,每个层次专注于不同的功能和职责。

层次结构:


自定义MVC架构:自定义MVC架构通常包括模型、视图和控制器三个主要组件,控制器负责协调视图和模型之间的交互。

三层架构:三层架构是按照功能和职责进行划分的,包括表示层、业务逻辑层和数据访问层。

关注重点:


自定义MVC架构:自定义MVC架构更关注于用户界面、用户交互和业务逻辑的定制化调整,重点在于满足特定的需求和业务流程。

三层架构:三层架构注重业务逻辑和数据访问的分离,重点在于将不同的功能和职责分层,以提高可维护性和重用性。

总体来说,自定义MVC架构与三层架构在组织方式、层次结构和关注的重点上存在一些差异。自定义MVC架构更注重定制和调整MVC的组件,满足特定的需求和业务逻辑。而三层架构更注重功能的分层和职责的划分,以实现业务逻辑和数据访问的分离。选择哪种架构模式应根据具体的应用场景、需求和团队的技术实践来确定。


5.自定义MVC的工作原理



6.自定义mvc实现

1.中央控制器

package com.liao.framework;
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.liao.web.BookAction;
/**
 * 中央控制器
 * 
 */
@WebServlet("*.action")
public class DispathServlet extends HttpServlet{
  public Map<String, Action> actionMap =new HashMap<String, Action>();
  @Override
  public void init() throws ServletException {
    actionMap.put("/book", new BookAction());
  }
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    this.doPost(req, resp);
  }
  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String uri = req.getRequestURI();
    uri =uri.substring(uri.lastIndexOf("/"),
        uri.lastIndexOf("."));
    Action action = actionMap.get(uri);
    action.execut(req, resp);
  }
  }


2.Action类定义

package com.liao.framework;
import java.io.IOException;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 子控制器
 * 真正做事,处理浏览器发送的请求的类
 * 
 */
public class Action {
  protected void execut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String methodName = req.getParameter("methodName");
    try {
      Method m = this.getClass().getDeclaredMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
      m.setAccessible(true);
      m.invoke(this, req,resp);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}



3.继承子控制器

package com.liao.web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.liao.framework.Action;
public class BookAction extends Action{
  public void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("bookAddServlet.add");
  }
  public void del(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("bookAddServlet.del");
  }
  public void upd(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("bookAddServlet.upd");
  }
  public void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("bookAddServlet.list");
  }
}


4.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>版本1:Servlet多,并且流程繁琐,代码可维护性差</p>
弊端:每一张表对应的每一个操作,都要写一个servlet类来处理<hr>
<a href="bookAdd.action">增加</a>
<a href="bookDel.action">删除</a>
<a href="bookUpd.action">修改</a>
<a href="bookList.action">查询</a>
<p>版本2:虽然是一个servlet,但是代码维护性差,代码冗余</p>
弊端:虽然每一张表对应的每一个操作,只要写一个servlet类来处理,但是每增加一个操作都需要改变原有的代码块,换句话说要增加条件分支<hr>
<a href="book.action?methodName=add">增加</a>
<a href="book.action?methodName=del">删除</a>
<a href="book.action?methodName=upd">修改</a>
<a href="book.action?methodName=list">查询</a>
<p>版本3:使用反射方法代码,虽然能解决代码冗余问题但是在项目应用中代码重复</p>
弊端:虽然解决了if条件分支代码冗余的问题,但是放到项目的范围内,反射的代码是重复的<hr>
<a href="book.action?methodName=add">增加</a>
<a href="book.action?methodName=del">删除</a>
<a href="book.action?methodName=upd">修改</a>
<a href="book.action?methodName=list">查询</a>
<p>版本4:使用MVC方法,流程简化,还有优化空间</p>
解决反射的代码重复的问题<hr>
<a href="book.action?methodName=add">增加</a>
<a href="book.action?methodName=del">删除</a>
<a href="book.action?methodName=upd">修改</a>
<a href="book.action?methodName=list">查询</a>
</body>
</html>


目录
相关文章
|
1月前
|
前端开发 Java 数据库
springBoot:template engine&自定义一个mvc&后端给前端传数据&增删改查 (三)
本文介绍了如何自定义一个 MVC 框架,包括后端向前端传递数据、前后端代理配置、实现增删改查功能以及分页查询。详细展示了代码示例,从配置文件到控制器、服务层和数据访问层的实现,帮助开发者快速理解和应用。
|
6月前
|
前端开发 Java
自定义mvc的增删改查
自定义mvc的增删改查
65 0
|
6月前
|
XML 前端开发 数据格式
自定义MVC引用XML配置文件实现
自定义MVC引用XML配置文件实现
65 0
|
6月前
|
设计模式 前端开发 搜索推荐
自定义mvc框架
自定义mvc框架
70 0
|
11月前
|
设计模式 前端开发
自定义mvc
自定义mvc
50 0
|
11月前
|
XML 前端开发 数据格式
自定义MVC超详细易懂----增删改查
自定义MVC超详细易懂----增删改查
102 0
|
11月前
|
存储 前端开发 架构师
自定义MVC实现 很详细(下)---优化版
自定义MVC实现 很详细(下)---优化版
|
11月前
|
存储 设计模式 前端开发
自定义MVC实现
自定义MVC实现
|
11月前
|
安全 Java
自定义mvc----增删改查终极篇
自定义mvc----增删改查终极篇
44 0
|
11月前
|
XML 设计模式 前端开发
自定义MVC---引用XML
自定义MVC---引用XML
50 0