初识MVC

news2024/10/7 9:17:30

初识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.coloradmin.cn/o/1633912.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UE5像素流部署以及多实例部署(兼容ue4)

像素流部署请看我之前的文章就行&#xff0c;今天讲的是多实例部署 在这里可以配置多实例的数量 如果设置800端口 设置两个实例 那么就是800 801端口 我的个人显卡是4060TI,最多开三个

张大哥笔记:服务器有挖矿木马程序,该如何处理?

这篇文章发表于2021年&#xff0c;今天借这个平台再发布一下&#xff0c;希望对大家有所帮助&#xff01; 今天收到一个粉丝求助&#xff0c;说收到了阿里云官方短信通知提示有挖矿程序&#xff0c;要求立即整改&#xff0c;否则会关停服务器&#xff0c;以下是我和他的对话内…

238 基于matlab的水平轰炸弹道的求解

基于matlab的水平轰炸弹道的求解&#xff0c;列出轰炸弹道方程组并利用龙格库塔法解算弹道方程。设计中包含了二维弹道与三维弹道的计算&#xff0c;并都绘制了弹道运动轨迹&#xff0c;最终还将整个题目集中在一个图形用户界面&#xff08;GUI&#xff09;上。程序已调通&…

CTFHub-Web-SSRF

CTFHub-Web-SSRF-WP 一、内网访问 1.题目提示说访问127.0.0.1的flag.php&#xff0c;在URL后面添加路径没想到直接访问成功 二、伪协议读取文件 1.题目提示说访问Web目录下的flag.php&#xff0c;联想到Web目录一般存放于/var/www/html/里&#xff0c;去修改URL尝试进行访问…

Atlassian Jira 信息泄露漏洞(CVE-2019-3403) 排查思路

Atlassian Jira&#xff1a; 企业广泛使用的项目与事务跟踪工具&#xff0c;被广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷管理等工作领域。 简述&#xff1a; 近日发现多个内网IP触发的Atlassian Jira 信息泄露漏洞的告警。 告警的检测规…

机器学习之基于Tensorflow(LSTM)进行多变量时间序列预测股价

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 项目简介&#xff1a;机器学习之基于TensorFlow&#xff08;LSTM&#xff09;进行多变量时间序列预测股价 一、项目…

Django-基础篇

Django是一个开放源代码的Web应用框架&#xff0c;由Python语言编写。它遵循MVC&#xff08;Model-View-Controller&#xff09;的软件设计模式&#xff0c;使开发者能够以高效、可扩展和安全的方式构建Web应用程序。 Django具有以下特点和优势&#xff1a; 强大的功能&#x…

CSS + HTML

目录 一.CSS&#xff08;层叠样式表&#xff09; 二. CSS 引入方式 三.选择器 3.1 标签选择器 3.2 类选择器 3.3 id选择器 3.4 通配符选择器 3.5 画盒子 四.文字控制属性 4.1字体大小 4.2字体粗细 4.3 字体倾斜 4.4行高 4.5行高--垂直居中 4.6 字体族 4.7 字体复…

TikTok一键采集发布视频的工具制作!

随着社交媒体的兴起&#xff0c;短视频平台如TikTok已经成为全球亿万用户分享生活、娱乐和学习的重要舞台&#xff0c;然而&#xff0c;对于内容创作者和商家来说&#xff0c;手动上传和管理视频内容既耗时又耗力。 因此&#xff0c;开发一款能够一键采集、编辑并发布视频的Ti…

在Ubuntu linux操作系统上操作MySQL数据库常用的命令

检查是否安装了MySQL&#xff0c;或检查MySQL的状态&#xff1a; sudo systemctl status mysql或 sudo systemctl status mysql.service如果mysql有安装&#xff0c;上面这条命令会返回mysql的状态active或inactive。 卸载mysql数据库 第一步是停了数据库&#xff1a; sud…

帕累托森林李朝政博士受聘「天工开物开源基金会」专家顾问

导语&#xff1a; 开源铸造了当前最前沿的科技引擎。开源驱动了软件生态&#xff0c;也以指数级速度驱动硬件生态。 3月中旬&#xff0c;天工开物开源基金会授予李朝政博士专家顾问&#xff0c;表彰他积极推动参与中国智能软件生态的建设&#xff0c;期待一起共筑未来新生态。…

软件设计师-重点的行为型设计模式

一、命令模式&#xff08;Command&#xff09;&#xff1a; 意图&#xff1a;&#xff08;上午题&#xff09; 将一个请求封装为一个对象&#xff0c;从而使得可以用不同的请求对客户进行参数化&#xff1b;对请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。 结构…

前端实现导入Excel进行数据展示、导出

需求 一个 excel 文档 需要对文档里面的数据进行筛选拆分重组 由于数据量巨大 后端又抽不出来手 于是使用纯前端解决方案 解决思路 前端导入excel 把 excel 的数据解析为 json 格式 对数据进行相应操作后 重新导出为新 excel 虽笨但有效 第一步 导入excel 该方案需引…

HDFS架构

HDFS 是一个主从 Master/Slave 架构一个 HDFS 集群包含一个 NameNode,这是一个 Master Server,用来管理文件系统的命名空间,以及协调客户端对文件的访问一个 HDFS 集群包含多个 DataNode,用来存储数据HDFS 会对外暴露一个文件系统命名空间,并允许用户数据以文件的形式进行存储在…

Ubuntu服务器创建新用户及解决新用户登录Access denied问题

目录 Ubuntu服务器创建新用户及解决新用户登录Access denied问题创建账号步骤创建用户只创建用户添加用户到sudo组 允许账号远程连接重启ssh服务 删除账号要删除用户而不删除用户文件如果要删除并且删除用户的家目录和邮件 查询指令查看所有用户查询特定用户账户信息查看用户组…

如何下载钉钉群直播回放:完整步骤解析

在当今快节奏的商业和教育环境中&#xff0c;钉钉群直播已经成为了沟通和学习的重要工具。直播结束后&#xff0c;很多观众都希望回顾内容&#xff0c;但却不知如何开始。如果你错过了实时直播&#xff0c;或者只是想再次观看精彩的演讲和讨论&#xff0c;那么下载钉钉群直播回…

商超物联网方案-人员和资产管理配置指南~配置人员和资产管理示例

配置人员和资产管理示例 组网图形 图1 配置人员和资产管理示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 某商场经常发现资产遗失或寻找不到。为降低财产损失&#xff0c;商场希望能统一监控资产所在位置和移动路径&#xff0c;以便掌握…

2024年Q1季度白酒行业数据分析:消费升级下,白酒均价上涨

前段时间&#xff0c;飞天茅台被曝批发参考价再次下探。而从线上市场的整体情况来看&#xff0c;白酒行业均价同比去年却有所上涨。鲸参谋数据显示&#xff0c;白酒均价在750元左右&#xff0c;同比去年上涨了14%。 尽管白酒行业均价有所上涨&#xff0c;但今年第一季度表现不…

java设计模式 -- 工厂模式

1、基本概念 工厂模式&#xff08;Factory Pattern&#xff09;是 Java 中最常用的设计模式之一&#xff0c;这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 工厂模式提供了一种创建对象的方式&#xff0c;而无需指定要创建的具体类。 工厂…

Spark-机器学习(8)分类学习之随机森林

在之前的文章中&#xff0c;我们学习了分类学习之支持向量机决策树支持向量机&#xff0c;并带来简单案例&#xff0c;学习用法。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&a…