MVC框架

article/2025/9/13 5:30:58

MVC框架

  • MVC框架——一个理论框架!!!
  • 前言——必看
    • 1 经典MVC框架
    • 2 经典mvc模式就是jsp+servlet+JavaBean
    • 3 JavaBean
    • 4 实际MVC框架应用
    • 5 总结

MVC框架——一个理论框架!!!

注意:mvc框架只是理论上的知识,是一个设计思维或者思想,而不是像ssh,ssm等可以实实在在应用的框架。

前言——必看

对于MVC框架总的认识:
在百度百科中:经典mvc框架中model定义为业务逻辑,但同时也解释为业务规则,或者解释为企业数据(实体类)和业务规则

题外话:很无语,不知道按照什么定义的,但是很明显业务逻辑不等同业务规则。
业务逻辑构成为:领域实体,业务规则,完整性约束,业务流程及工作流。
具体参考这篇文章细说业务逻辑

根据百度百科的解释,无论怎么定义model,都会发现其实这三种都和业务有关系(至于有的博主会说model层就是仅仅和数据有关的实体类,,其实这个model本义上已经不是mvc框架里的那个model,,更多地像是一个层,例如service层,dao层之类的层。后面会解释。)

mvc框架就是一个设计思想,根本就不是可以实实在在应用的框架(这一点让我吃了大亏,想骂人…)。mvc框架的宗旨就是要将软件用户界面和业务逻辑分离以使代码可扩展性、可复用性、可维护性、灵活性加强。而实际应用和项目里的mvc框架,其实是mvc和三层结构的混合体,常见的有ssh,ssm。

以ssh举例,项目分层有controller,view,,然后原来mvc中的model层变为实体类,service,和dao,,然后很多人把这个实体类称为模型,我叫它模型二号,这个模型二号是和mvc那个模型不一样的。原来的模型model是带有逻辑,而这个模型二号model是实实在在地只和数据有关,和业务无关的实体类。至于为什么叫model:以model命名的层,里面存的是实体类的模型,一般是用来给前端用的(entity是数据库实体类,是和数据库对应的,此外还有domain,详细解释在文章第四部分)

如何区分model是含有逻辑的那个,还是只含有数据的那个,个人理解如下:带有逻辑的那个model是经典mvc框架里的model,是理论上的。而凡是涉及和具体项目,具体代码有关的model,都仅仅指的是实体类。

另外,看其它的博文,还有博主说service是从controller中分离出来的,这里我只能说他把mvc框架当做三层结构用了,连mvc的宗旨都没弄明白——MVC要实现的目标是将软件用户界面和业务逻辑分离,而Controller层只是用来调度View层和Model层,将用户界面和业务逻辑合理的组织在一起,起粘合剂的效果,所以Controller中的内容能少则少,说白了就是controller尽量不含业务逻辑,一般只含有应用程序逻辑,但这一点在实际项目中很模糊,需要很优秀的开发人员在开发前设计好,目前我看到的实际项目,都是action里面装了一大堆逻辑,然后项目能跑起来就行了,无语~~


1 经典MVC框架

1,定义
经典MVC模式中,M是指业务模型,V是指用户界面,C则是控制器。其中,View的定义比较清晰,就是用户界面。

2,目的
使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据可以分别用柱状图、饼图来表示。 其中,View的定义比较清晰,就是用户界面。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。
简单流程图如下:
mvc单线

3,mvc三层解释
V即View视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操作的方式。

M即model模型是指模型,模型指企业数据(即实体类)和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

C即controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

4,mvc的宗旨就是:
MVC要实现的目标是将软件用户界面和业务逻辑分离以使代码可扩展性、可复用性、可维护性、灵活性加强。
View层是界面,Model层是业务逻辑,Controller层用来调度View层和Model层,将用户界面和业务逻辑合理的组织在一起,起粘合剂的效果。所以Controller中的内容能少则少,这样才能提供最大的灵活性。

2 经典mvc模式就是jsp+servlet+JavaBean

注意:此时已经不是理论上的mvc框架了
servlet

3 JavaBean

概述
JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制(反射机制)发现和操作这些JavaBean 的属性。
JavaBean

1,JavaBean(就是一个Java类)的定义:满足一下2点 ,就可以称为JavaBean

  • a.public 修饰的类 ,public 无参构造
  • b.所有属性(如果有) 都是private,并且提供set/get (如果boolean 则get 可以替换成is)

2 使用层面,JavaBean分为2大类:

  • a.封装业务逻辑的JavaBean (LoginDao.java封装了登录逻辑) 逻辑
    可以将jsp中的JDBC代码,封装到Login.java类中 (Login.java)
  • b.封装数据的JavaBean (实体类,Student.java Person.java ) 数据
    对应于数据库中的一张表

封装数据的JavaBean 对应于数据库中的一张表 (Login(name,pwd))
封装业务逻辑的JavaBean 用于操作 一个封装数据的JavaBean

举例:数据模型(Javabean封装数据)

package userLogin;public class Login {private String name;private String pwd;public Login() { //无参构造super();// TODO Auto-generated constructor stub}public Login(String name, String pwd) { //有参构造super();this.name = name;this.pwd = pwd;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}}

举例:业务规则模型(Javabean封装数据)

package org.lanqiao.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class LoginDao {public int login(String name , String pwd){String URL="jdbc:mysql://127.0.0.1:3306/jdbc?serverTimezone=UTC&characterEncoding=UTF-8";String USERNAME = "root"; //账号String PWD = "123456"; //密码Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try{//导入驱动,加载具体的驱动类Class.forName("com.mysql.cj.jdbc.Driver");//连接数据库conn = DriverManager.getConnection(URL,USERNAME,PWD);//发送sql语句// String sql = "select count(*) from login where name = ? and pwd = ?"; //报错,找不到原因String sql = "select * from login";pstmt = conn.prepareStatement(sql);
//			pstmt.setString(1, name);
//			pstmt.setString(2, pwd);//执行查询,获取结果集rs = pstmt.executeQuery(sql);//处理结果集int count=0;while(rs.next()){String daoName = rs.getString("name");String daoPwd = rs.getString("pwd");if(name.equals(daoName) && pwd.equals(daoPwd)){count = 1;break;}}return count;}catch(Exception e){e.printStackTrace();return -1;}finally{try {//关闭连接if(rs!=null) rs.close();if(pstmt!=null) pstmt.close();if(conn!=null) conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}

注意:JavaBean在Java项目中更多的是封装数据。

4 实际MVC框架应用

实际应用mvc
注意:更多地去研究ssh和ssm框架,mvc只是一个设计思想。

5 总结

mvc不是可以实实在在应用的框架,只是一种设计思想。
mvc设计框架的思想就是:

  • MVC要实现的目标是将软件用户界面和业务逻辑分离以使代码可扩展性、可复用性、可维护性、灵活性加强。
  • View层是界面,Model层是业务逻辑,Controller层用来调度View层和Model层,将用户界面和业务逻辑合理的组织在一起,起粘合剂的效果。所以Controller中的内容能少则少,这样才能提供最大的灵活性。

http://chatgpt.dhexx.cn/article/aHuPwCxK.shtml

相关文章

dojo介绍

dojo是目前最为强大的js框架,包括ajax,browser,event,widget等跨浏览器API,用dojo写Web OS可谓非常方便。 dojo现在已经4.0了,我自己其实不怎么用dojo,毕竟dojo强大的地方在于界面和特效的封装,可以让开发者快速构建一…

(2)Dojo学习之模块化

引言Dojo之模块化 1定义模块2调用模块3解释dojoConfig的全局变量 总结 1本篇博客代码下载地址Dojo模块化 1.引言 在本篇博客中主要讲解一下如何在dojo中使用模块,如何自定义自己的模块等等,在使用dojo编程的时候,大家一定要转变自己的思想&a…

Dojo 1.6 官方教程: 创建自定义Dojo小部件(Widget)

在这个教程中,我们将会演示如何利用Dojo 和Dijit框架来创建自定义的小部件。 主要会使用到dijit._Widget 和dijit._Templated 基类和mixin。 对dijit框架的基础知识,可以参看前两篇教程 难度:中等 适用Dojo版本: 1.6 作者&#xf…

(3)Dojo学习之Class

引言dojo中的类 1创建一个简单的类2类和模块结合使用3关于类的继承 需求 1需求一2需求二很重要21代码实现22程序出错23程序运行3 需求三 再次介绍require加载模块总结 1本博客代码的下载地址dojo_class 1.引言 说到面向对象,我们就不得不提一下类,在原生…

探索dojo/json

难度:中等 Dojo版本:1.7 原作者:Kris Zyp 译者:Oliver (zhuxw1984gmail.com) 原文链接:http://www.sitepen.com/blog/2012/09/21/exploring-dojojson/ (年初翻译过Kris Zyp的另一篇介绍dojo/json的文章&…

dojo是什么?

现在Web端vue、React、Angular大行其道,安卓端js也有React Native等,那么学习dojo有什么意义呢? 有些老的项目还是用的dojo。。。。例如arcgis javascript api等等 https://dojotoolkit.org/documentation/tutorials/1.10/hello_dojo/ 为什…

Dojo入门篇

Dojo是一个JavaScript实现的开源DHTML工具包,Dojo最初的目标是解决开发HTML应用程序中遇到的一些长期存在的问题,然而现在Dojo已经成为了开发RIA应用程序的利器。 Dojo让Web页面具有动态能力,我们可以在其他支持JavaScript的环境中使用Dojo。…

dojo中的类

使用arcgis api for js 4.*进行地图的web前端开发,就不得不与dojo打交道。dojo是一个框架,自成体系,比如它对类的支持,有自己的一套。众所周知,js不是面向对象语言,没有类这一说,都是用函数来模…

dojo学习教程

Dojo 作为最著名的 Ajax 开源项目之一,不仅让 Web 程序员可以免费获得和使用其框架进行 Web 应用的开发,更吸引了大量的开发者对其不断的扩充,开发新的组件。DojoX 就是在这样的开发社区中产生的。DojoX 是一组基于 dojo 的开源项目的集合&am…

Dojo与jQuery综合比较分析

最近Dojo和jQuery双双发布了最新的1.8版本,有着相同版本号的两个Javascript库也有许多核心的相同之处:相同的资源加载机制AMD、相同的选择器 引擎Sizzle等。作为业界知名的Javascript库,Dojo和jQuery在各自领域有着为数众多的拥护者。不过正所谓一把钥匙开一把锁,对一个项目…

Dojo简述

Dojo是一个JavaScript实现的开源DHTML工具包。Dojo的最初目标是解决开发DHTML应用程序时遇到的一些长期存在的历史问题。 【注:DHTML是一种使HTML页面具有动态特性的艺术。DHTML是一种创建动态和交互WEB站点的技术集合。对大多数人来说,DHTML意味着HTML…

ibatis简介

背景 介绍ibatis实现之前,先来看一段jdbc代码: Class.forName("com.mysql.jdbc.Driver"); String url "jdbc:mysql://localhost:3306/learnworld"; Connection con DriverManager.getConnection(url, "root","learnwo…

Ibatis使用

部分参考:https://blog.csdn.net/shixiaoguo90/article/details/49949445 Apache iBatis是当前IT项目中使用很广泛的一个半自动ORM框架,区别于Hibernate之类的全自动框架,iBatis对数据库的操作拥有更加灵活的控制,对于那些经常需…

iBatis-iBatis配置环境(eclipse+mysql)

在使用JAVA框架前要配置其环境,比如使用Hibernate、Struts等都需要对其环境进行配置,当然使用iBatis开发之前,也需要配置iBatis环境。 一、iBatis环境的配置只需三步 1.引入jar包 2.配置sqlMapConfig.xml文件 3.配置SqlMap.xml文件 二、概览i…

什么是IBatis

什么是IBatis 我一直想写一篇关于持久化数据访问的文章,可是我不知道怎么开始介绍,前两天晚上睡觉的时候突然有了一些开始写的想法,所以我决定今天动手开始写一点东西。头一次写这样的文章,希望大家不要见怪。 现在网上很多人学习…

ibatis-Spring 整合

这两天一直在研究ibatis与spring的整合 一个小小的demo搞的我头晕目眩的,但程序一旦跑起来了,突然有一种豁然开朗,重见天日,感觉生活很美好的感觉!,也许,这就是那一行行的代码带给我们的不同享受…

ibatis与spring整合

这两天一直在研究ibatis与spring的整合 一个小小的demo搞的我头晕目眩的,但程序一旦跑起来了,突然有一种豁然开朗,重见天日,感觉生活很美好的感觉!,也许,这就是那一行行的代码带给我们的不同享受…

iBatis--iBatis 是什么?

一.为啥使用iBatis? 在 Hibernate、JPA 这样的一站式对象 / 关系映射(O/R Mapping)解决方案盛行之前,iBaits 基本是持久层框架的不二选择。即使在持久层框架层出不穷的今天,iBatis 凭借着易学易用、轻巧灵活等特点&am…

iBatis-iBatis基本操作(增删改查)

在上一篇iBatis博客中已介绍了如何配置iBatis环境,这篇博客主要进行介绍一些iBatis的基本操作实现。iBatis的增删改操作都需要操作SqlMap,DAO层Manger,POJO 这几个类来实现。下面分别介绍一下iBatis基本操作的实现: 一.iBatis的添加数据方式 这里介绍两种iBatis添加…

Ibatis与Mybatis的区别—侧重于Ibatis

目录 一、什么是Ibatis? 1、iBatis是一款轻量级的持久化框架 2、iBatis最大的特点是将SQL语句与Java代码分离 3、iBatis具有以下几个关键组成部分: 二、Ibatis与Mybatis的区别 1、基本信息不同 2、开发时间不同 3、配置方法不同 三、Ibatis与My…