MVC框架

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 block
						e.printStackTrace();
					}
			}
	}
		
}

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

4 实际MVC框架应用

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

5 总结

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

  • MVC要实现的目标是将软件用户界面和业务逻辑分离以使代码可扩展性、可复用性、可维护性、灵活性加强。
  • View层是界面,Model层是业务逻辑,Controller层用来调度View层和Model层,将用户界面和业务逻辑合理的组织在一起,起粘合剂的效果。所以Controller中的内容能少则少,这样才能提供最大的灵活性。
  • 51
    点赞
  • 299
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值