MVC名词解释
这一个章节说明项目中应该建立哪些
package
,形成一个良好开发的习惯,与统一首先,先了解下三层的一些概念:
MVC
是一种设计模式,指的是三层
Model
模型层(在开发中用于存放实体类、持久化对象)View
视图层(在开发指 html、jsp 等页面)Controller
控制层(在开发中负责业务逻辑流程的控制)
Model
定义了一些实体类 ,具体对应数据库中的一张表,class
的属性对应表的字段名
,通常开发中的entity
包就是数据模型层
View
我自己的理解就是视图应用程序用户界面相关部分啦,所以就大概理解为 html
,Jsp
等页面,
网上搜集的资料总结大概描述为:(不对的地方请帮我举出,谢谢各位看官)
-
View 会从 Model 中取数据显示
关于这点可能是 html 中慢慢的标签套表达式,表达式满天飞
Model 提供数据的最新状态给 View (通知更新)
-
当Model 变化时,View 负责维护数据表现的一致性。
页面得刷新,(一次转发)才能变化吧
-
View 还同时将用户的请求通知控制器
也就是 ajax 请求吧
Controller
控制器定义了应用程序的行为,供了一系列的接口访问路径.
它负责对来自视图的用户请求进行解释,并把这些请求映射成相应的行为,这些行为由模型负责实现
-
在一个Web应用程序中,它们的表现形式可能是一些来自客户端的GET或POST的HTTP请求
@ResponseBody //表示该类下面的所以方法将返回 Json格式的字符串 public class UserController{ @RequestMapping('/login') //提供的访问路径,url: 项目路径 + /login 访问 public String login(){ /*具体实现逻辑*/ } @RequestMapping('/regiest') public String(){ /*具体实现逻辑*/ } }
-
Controller
本身不对model
数据进行操作,只是负责接到任务,控制任务走向,分派任务(dispatch),指定具体的model
来操作数据,通常进行操作的时候(actions)由具体的service
来实现
在此处加入了 Vuex 中的数据处理的关键词,方便理解
JavaBean、Entity、Pojo、Model的区别
在Model
层还可以听到一些词语比如: javaBean
,pojo
,entity
,还是有些区别的:
-
entity
名称译为实体,在开发过程中可以在项目目录中建立entity
包,笼统的指一切实体,public class Person{ private String name; private int age; private String phoneNumber; private String address; }
javaBean
意为:
- 该类有系列的
private
属性,(所以他的成员属性用getter
与setter
来访问) - 必须含有一个 公有的无参构造方法,(向外暴露 new 实例)
- 该类有可能要被
implement
,extend
(“侵入”) - 这个类应是可序列化的。实现
serializable
接口。 (关于这一点,我上学的时候好像没学到??)
大概长下面这种样子:
public class Chinese extends Person{
/* 勤劳、勇敢、爱和平的中国人,属性为私有,值为 true,通过 setter and getter 操作*/
private Boolean diligent;
private Boolean brave;
private Boolean peaceful;
/* 无参数的构造方法,public公开的,
* 意味着国家将坚定不移走开放路线,深化改革开放,
* 时时刻刻向世界展示新中国 new
*/
public Chinese(){
}
/*public 公开的有参数的构造方法,想给新中国添加点光彩嘛?*/
public Chinese(Boolean diligent,Boolean brave,Boolean peaceful){
this.diligent = diligent;
this.brave = brave;
this.peaceful = peaceful;
}
public Boolean getDiligent() {
return diligent;
}
public void setDiligent(Boolean diligent) {
this.diligent = diligent;
}
public Boolean getBrave() {
return brave;
}
public void setBrave(Boolean brave) {
this.brave = brave;
}
public Boolean getPeaceful() {
return peaceful;
}
public void setPeaceful(Boolean peaceful) {
this.peaceful = peaceful;
}
}
Chinese
继承了Person
类,也具有Person
的属性
-
pojo
(plain old java object)朴素的、简单的 java 对象 。
- 类的成员是私有的,且有一系列的
setter
andgetter
方法来提供访问 - 它没有继承 (
extends
)也没有 实现(implements
) 任何的 class 或者 interface 更没有被其它东西而“侵入”
总结:
从比较可以看出,
pojo
严格遵循 “朴素” 标准,仅仅只是作为数据的临时载体,不具有业务逻辑处理能力而
JavaBean
他是 一套Java Object
的编写规范,他除了一些该有的 方法外,往往还含有其它 逻辑方法在其中
Spring 通过 依赖注入 与 切面编程,使得程序之间结构、分工明确,让代码不再“紧耦合”,在使用了
Pojo
对象后我们很少用 new 关键词来产生对象正是Spring 通过Java的反射机制,能 动态的向某个对象提供它所需要的其他对象,使得代码更简洁
从一个简单的 MVC 业务流程开始
我在此描述一个登录的业务流程,需要注意的是,平常开发过程中,我们并不只是用到了MVC 三层的分类,还可能有其他层,比如Service
,Dao / Mapper
下面流程中的描述中即将出现
web视图发送一个请求 去往一个接口,比如
/login
找到对应的
Controller
,在spring 中具体路径体现为RequestMapping("/login")
访问这个路径,执行该``RequestMapping`中的逻辑
Controller
找到对应的Service
Service
找到对应的Dao
Dao
联合Model
操作数据库返回结果给
Controller
Controller
对结果进行处理
Dao
层为数据访问层,比较基础的操作,具体到对于某个表、某个实体的增删改查,操作数据库,也就是Mapper
层(一些SQL语句)
注意:在比较原生的开发中 我们使用
Dao
,而关键词Mapper
是在Mybatis、Hibernate这样的SQL映射工具出现后常常见到的
service
层为业务逻辑层(具体做事的层),接受Controller
层的委派,跟Dao / Mapper
打交道,交流完再将结果反馈给Controller
元旦快乐!今年也要进步!
--------------------------------转载请注明出处---------------------------------