初识MVC

初识MVC

理论部分

今天第一次学MVC,拿到一个练手项目。现在来记录一下学习过程。

项目的背景就是个学生管理系统。我只做后端。
从大的来说MVC将应用程序分为三个主要组件(部分):

模型(Model)是应用程序的主要部分,包含了业务逻辑和数据。model往往代表了对象和数据库之间的数据连接。这里就对应下面的Service,dao。

视图(View)是model的可视化表示。可以是图形用户界面(GUI),而在 Web应用中,view通常是指渲染数据的 HTML。

控制器(Controller)是连接model和view的部分。它接收用户对view的输入,并将这些输入转化为对model的操作。

请添加图片描述
基于上图从左到又进行介绍。
最外面就是用户。然后到view层, 然后到controller层,service层,dao层,model层。

view层:就是可视化界面。是GUI用户图形化界面,在Web中就是用于渲染数据的HTML。

controller层:负责处理来自view层的交互事件,view要完成业务操作,就要请求controller层。然后controller就写了一个该交互事件的逻辑框架,也就是这个事件,有各种需求,每个需求对应一个函数,里面的具体的各种需求逻辑代码包给Service层实现。

service层:也叫业务层。这个包中的类通常实现应用程序的核心业务逻辑。在这里会进行数据操作,但是具体的数据操作并不在这里实现,而是交给dao层实现。这里只进行获取数据的前后的逻辑代码的编写。

dao层:这个包中的类通常负责直接与数据(库)进行交互,service和dao共同组成了MVC当中的"model"组件。可以这么理解:在Service层中用到的数据操作,全部都要写到这里来,因为只有dao层才能进行数据的实际操作。包括对数据的增删查改。

model层:这个包中的类通常代表应用程序的数据模型,也就是用户需要操作的数据。


实操部分

今天的目标是完成登录界面的逻辑。

View和controller

用户访问在view触发了登录事件。然后view就请求controller进行完成。controller中定义了大致的事件处理逻辑,来完成这个事件。
然后这个事件的需求大致如下。1.根据输入的用户名,查找用户名是否存在。
2.在用户名已存在的前提下,校验密码是否正确。3.// 用户名密码皆正确,登录成功。

一个需求就可以看成一个函数,用函数去完成功能。

这个就是处理这个事件的具体逻辑。这些需求的具体业务并不在这里实现。而是交给下一层的业务层Service进行实现,因为这些需求就是核心业务。

Service

然后的具体功能的函数要在这里实现,这里是业务逻辑的核心。简单来说上面分析出来的需求函数,要在这里实现。

需要注意的是在这里会进行数据操作,但是具体的数据操作并不在这里实现,而是交给dao层实现。这里只进行获取数据的前后的逻辑代码的编写。

简单的说:需求逻辑确实是在这里写,但是你的逻辑中如果有涉及到数据的访问操作,那这个数据访问操作你只能调用数据处理函数。然后这个数据处理函数全部放在dao层。也就是调用dao层的函数完成数据操作。

dao

你在Service里面想完成什么样的数据操作,那就把这个操作的函数写到这里来。用的时候就来这里调用。

model

说白了数据全存在这里,dao层中会访问到这个层定义的各种数据。


比如今天的作业:
dao层:接口添加两个方法,然后在dao层的实现类实现这两个方法。

getAllnotNullUser用户获取所有非空用户。
byUsernameGetPassword通过用户名获取用户的密码。

@Override
//获取所有的已存在不为空的用户。
public User[] getAllnotNullUser(){User[] users = UserData.USERS;int count = 0;for(int i = 0;i< users.length;i++){if(users[i]!=null){count++;}}User[] hasExistUsers = new User[count];for(int i = 0;i<count;i++){hasExistUsers[i] = users[i];}return hasExistUsers;
}//通过账户名获取账户的密码。
@Override
public String byUsernameGetPassword(String account) {String backPassword = "";for(int i =0;i<UserData.USERS.length;i++){if(UserData.USERS[i].getUsername().equals(account)){backPassword = UserData.USERS[i].getPassword();return backPassword;}}return null;
}

然后在Service层调用这两个数据操作功能,进一步完成功能。

public boolean checkUserExist(String usernameInput) {// TODO 待实现//调用dao层获取所有已经存在的用户数据.//然后进行遍历,遍历的过程中匹配用户的输入是否成功匹配。User[] allnotNullUser = userDao.getAllnotNullUser();for(int i = 0;i<allnotNullUser.length;i++){if(allnotNullUser[i].getUsername().equals(usernameInput)){return true;}}return false;
}public boolean checkPwdUsernameExists(User user) {// TODO 待实现//由于用户已经存在了,那么直接从user里面取出账户名//然后调用dao中的操作,通过用户名获取目标用户的密码。//然后回到这里和user的密码进行匹配。String correctPassword = userDao.byUsernameGetPassword(user.getUsername());if(correctPassword.equals(user.getPassword())){return true;}return false;
}

到这里登录功能就已经完成了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/319485.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql 中having和where区别

where 是用于筛选表中满足条件的行&#xff0c;不可以和聚类函数一起使用 having 是用于筛选满足条件的组 &#xff0c;可与聚合函数一起使用 所以having语句中不能使用select中定义的名字

Hive大数据任务调度和业务介绍

目录 一、Zookeeper 1.zookeeper介绍 2.数据模型 3.操作使用 4.运行机制 5.一致性 二、Dolphinscheduler 1.Dolphinscheduler介绍 架构 2.架构说明 该服务内主要包含: 该服务包含&#xff1a; 3.FinalShell主虚拟机启动服务 4.Web网页登录 5.使用 5-1 安全中心…

C++中的reverse_iterator迭代器结构设计

目录 reverse_iterator迭代器结构设计 reverse_iterator迭代器基本结构设计 operator*()函数 operator()函数 operator->()函数 operator!()函数 rbegin()函数 rend()函数 operator--()函数 operator()函数 测试代码 const_reverse_iterator迭代器设计 reverse…

安全再升级,亚信安慧AntDB数据库与亚信安全二次牵手完成兼容性互认证

日前&#xff0c;湖南亚信安慧科技有限公司&#xff08;简称&#xff1a;亚信安慧&#xff09;的产品与亚信科技&#xff08;成都&#xff09;有限公司&#xff08;简称&#xff1a;亚信安全&#xff09;再次携手&#xff0c;完成亚信安慧AntDB数据库与亚信安全IPoE接入认证系统…

Ftrans文件外发系统 构建安全可控文件外发流程

文件外发系统是企业数据安全管理中的关键组成部分&#xff0c;它主要用于处理企业内部文件向外部传输的流程&#xff0c;确保数据在合法、安全、可控的前提下进行外发。 文件外发系统的主要作用包括&#xff1a; 1、防止数据泄露&#xff1a;通过严格的审批流程和安全策略&…

节能洗车房车牌识别项目实战

项目背景 学电子信息的你加入了一家节能环保企业&#xff0c;公司的主营产品是节能型洗车房。由于节水节电而且可自动洗车&#xff0c;产品迅速得到了市场和资本的认可。公司决定继续投入研发新一代产品&#xff1a;在节能洗车房的基础上实现无人值守的功能。新产品需要通过图…

Altium Designer——第一课

一个电子设计包含四个部分&#xff1a; 1.原理图库的设计 2.原理图的设计 3.PCB封装库的设计 4.PCB布局和PCB布线的设计 电子设计工程包含的部分&#xff1a; Free documents&#xff1a; 在我们保存AD工程的文件夹中&#xff0c;如果打开的是prjpcb后缀的工程文件&#xf…

《Fundamentals of Power Electronics》——基础交流建模方法

PWM整流器小信号交流模型建模的主要步骤为&#xff1a; (a)利用小纹波近似的动态版本&#xff0c;建立与电感和电容波形的低频平均值有关的方程&#xff1b; (b)平均方程的扰动和线性化&#xff1b; (c)交流等效电路模型的建立。 以下图buck-boost电路为例进行分析。 首先测…

二叉树的迭代遍历 | LeetCode 144. 二叉树的前序遍历、LeetCode 94. 二叉树的中序遍历、LeetCode 145. 二叉树的后序遍历

二叉树的前序遍历&#xff08;迭代法&#xff09; 1、题目 题目链接&#xff1a;144. 二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3]示例 2&#x…

【Java】实现一个简单的线程池

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 ​编辑 一、线程池的模式 二、线程池的一些参数 三、代码实现 1.BlockingQueue 2.ThreadPool 四、拒绝策略 一、线程池的模式 线程池顾名思义就是管理线程的一个池子&#xff0c;我们把创建线程的过程交给…

Neo4j v5 中 Cypher 的变化

How Cypher changed in Neo4j v5 Neo4j v5 中 Cypher 的变化 几周前&#xff0c;Neo4j 5 发布了。如果你像我一样&#xff0c;在 Neo4j 4 的后期版本中忽略了所有的弃用警告&#xff0c;你可能需要更新你的 Cypher 查询以适应最新版本的 Neo4j。幸运的是&#xff0c;新的 Cyp…

SpringBoot自定义定时任务

通常&#xff0c;在我们的项目中需要定时给前台发送一些提示性消息或者我们想要的定时信息&#xff0c;这个时候就需要使用定时任务来实现这一功能&#xff0c;实现也很简单&#xff0c;接下来具体来看看吧~ 简单定时任务 首先&#xff0c;你需要在你的启动类上加上开启定时任…

Python-VBA函数之旅-oct函数

目录 一、oct函数的常见应用场景 二、oct函数使用注意事项 三、如何用好oct函数&#xff1f; 1、oct函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;神奇夜光杯-CSDN博客 一、oct函数的常见应用场景 oc…

docker部署nginx并实现https

文章目录 docker部署nginx并实现https1、服务器环境2、安装docker3、准备证书4、准备nginx配置文件和dockerfile文件5、创建nginx镜像与容器6、验证访问 docker部署nginx并实现https 1、服务器环境 [rootliuyanfen12 ~]#systemctl stop firewalld [rootliuyanfen12 ~]#setenf…

WORD排版常见问题与解决方案

前言 近期使用word软件进行论文排版工作&#xff0c;遇到了一些常见的问题&#xff0c;记录一下&#xff0c;避免遗忘。 基本配置 系统环境&#xff1a;win10/win11 word版本&#xff1a;Microsoft Office LTSC 专业增强版 2021 问题与解决方案 问题1&#xff1a;页眉显示内…

【STM32F407+CUBEMX+FreeRTOS+lwIP netconn UDP TCP记录】

STM32F407CUBEMXFreeRTOSlwIP netconn UDP TCP记录 注意UDPUDP1UDP2 TCPTCP clientTCP server图片 注意 1、超时 #include “lwipopts.h” #define LWIP_SO_RCVTIMEO 12、先保证能ping通 3、关于工程创建可参考 【STM32F407CUBEMXFreeRTOSlwIP之UDP记录】 4、…

C语言之数据结构之栈和队列的运用

目录 1. 用队列实现栈1.1 思路讲解1.2 代码实现 2. 用栈实现队列1.1 思路讲解1.2 代码实现 总结 •͈ᴗ•͈ 个人主页&#xff1a;御翮 •͈ᴗ•͈ 个人专栏&#xff1a;C语言数据结构 •͈ᴗ•͈ 欢迎大家关注和订阅!!! 1. 用队列实现栈 题目描述&#xff1a; 请你仅使用两个…

恶补《操作系统》5_2——王道学习笔记

5.2_1 I-O核心子系统 1、用户层软件 假脱机系统 2、设备独立性软件&#xff08;设备无关性软件&#xff09; IO调度、设备保护、设备分配与回收、缓冲区管理 3、设备驱动程序&#xff08;比如打印机驱动&#xff09; 4、中断处理程序 5、硬件 5.2_2 假脱机技术&#xff…

小程序引入 Vant Weapp 极简教程

一切以 Vant Weapp 官方文档 为准 Vant Weapp 官方文档 - 快速入手 1. 安装nodejs 前往官网下载安装即可 nodejs官网 安装好后 在命令行&#xff08;winr&#xff0c;输入cmd&#xff09;输入 node -v若显示版本信息&#xff0c;即为安装成功 2. 在 小程序根目录 命令行/终端…

www.fastssh.com SSH over WebSockets with CDNs

https://www.fastssh.com/page/create-ssh-cdn-websocket/server/这其实不是标准的websocket报文(服务器响应报文无Sec-Websocket-Accept字段)&#xff0c;所以无法使用github.com/gorilla/websocket包&#xff1a;GET / HTTP/1.1 Host: hostname:8080 User-Agent: Go-http-cli…