当前位置: 首页 > article >正文

MVC框架学习

大一的时候写过一个mvc框架的跑酷游戏,但是那时候基础不扎实,没学明白也没听懂。现在深入的学习一下

以下内容参考:MVC 模式 | 菜鸟教程 (runoob.com)

MVC 模式

MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

  • Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。从现实世界中抽象出来的对象模型,是应用逻辑的反应;它封装了数据和对数据的操作,是实际进行数据处理的地方(模型层与数据库才有交互)
  • View(视图) - 视图代表模型包含的数据的可视化。
  • Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。

实现

我们将创建一个作为模型的 Student 对象。StudentView 是一个把学生详细信息输出到控制台的视图类,StudentController 是负责存储数据到 Student 对象中的控制器类,并相应地更新视图 StudentView

MVCPatternDemo,我们的演示类使用 StudentController 来演示 MVC 模式的用法。

mvc模式使用: 

public class MVCPatternDemo {
   public static void main(String[] args) {
 
      //从数据库获取学生记录
      Student model  = retrieveStudentFromDatabase();
 
      //创建一个视图:把学生详细信息输出到控制台
      StudentView view = new StudentView();
 
      StudentController controller = new StudentController(model, view);
 
      controller.updateView();
 
      //更新模型数据
      controller.setStudentName("John");
 
      controller.updateView();
   }
 
   private static Student retrieveStudentFromDatabase(){
      Student student = new Student();
      student.setName("Robert");
      student.setRollNo("10");
      return student;
   }
}

这里介绍的好简单,继续学习

以下内容参考:【Unity3D】MVC框架在Unity项目中的理解与使用_unity mvc框架工作原理-CSDN博客

MVC是一种比较常见的设计框架,是一种将代码的功能进行划分的一种设计框架,主要原理就是将软件用户界面和业务逻辑分离,以使代码可扩展性、可复用性、可维护性、灵活性加强。

组成MVC的三个模式分别是组合模式、策咯模式、观察者模式,MVC在软件开发中发挥的威力,最终离不开这三个模式的默契配合。

观察者模式有两部分组成,被观察的对象和观察者,观察者也被称为监听者。对应到MVC中,Model是被观察的对象,View是观察者,Model层一旦发生变化,View层即被通知更新。View层和Model层互相之间是持有引用的。 我们在开发Web MVC程序时,因为视图层的html和Model层的业务逻辑之间隔了一个http,所以不能显示的进行关联,但是他们观察者和收听者的关系却没有改变。当View通过http提交数据给服务器,服务器上的Model接受到数据执行某些操作,再通过http响应将结果回送给View,View(浏览器)接受到数据更新界面,这不正是一个接受到通知并执行更新的行为吗,是观察者模式的另一种表现形式。

策略模式是View和Controller之间的关系,Controller是View的一个策略,Controller对于View是可替换的, View和Controller的关系是一对多,在实际的开发场景中,也经常会碰到一个View被多个Controller引用,这即使策咯模式的一种体现,只是不那么直观而已。

总结一下,关于MVC各层之间关系所对应的设计模式

View层,单独实现了组合模式

Model层和View层,实现了观察者模式

View层和Controller层,实现了策咯模式

看了一顿下来,感觉还挺简单的。以后实践了自己再总结吧


http://www.kler.cn/a/231940.html

相关文章:

  • 基于视觉智能的时间序列基础模型
  • RabbitMQ教程:路由(Routing)(四)
  • python实现十进制转换二进制,tkinter界面
  • 智能化运维与AI/ML辅助决策:实现自动化与预测优化
  • 【珠海科技学院主办,暨南大学协办 | IEEE出版 | EI检索稳定 】2024年健康大数据与智能医疗国际会议(ICHIH 2024)
  • 数据分析-Excel基础操作
  • springboot项目启动报错:dynamic-datasource can not find primary datasource
  • 《Git 简易速速上手小册》第7章:处理大型项目(2024 最新版)
  • 黑豹程序员-ElementPlus选择图标器
  • 04 使用gRPC实现客户端和服务端通信
  • Go语言Gin框架安全加固:全面解析SQL注入、XSS与CSRF的解决方案
  • 倒计时61天
  • 实景三维数据库管理系统助力实景三维中国建设
  • 【C++修行之道】(引用、函数提高)
  • CMake编译JSONCPP库
  • JCIM | MD揭示PTP1B磷酸酶激活RtcB连接酶的机制
  • 视频上传 - 断点续传那点事
  • 相机图像质量研究(3)图像质量测试介绍
  • L1-088 静静的推荐
  • vue3+threejs+koa可视化项目——模型文件上传(第四步)
  • 2024年:用OKR管理你的生活
  • 简单说网络:TCP+UDP
  • 上海泗博HART转ModbusTCP网关HME-635应用案例之组态王和超声波液位计通信
  • 解决“org.apache.catalina.startup.Catalina.stopServer 未配置关闭端口。通过OS信号关闭服务器。服务器未关闭“
  • c++阶梯之类与对象(中)< 续集 >
  • Mac利用brew安装mysql并设置初始密码