初识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通过用户名获取用户的密码。

java 复制代码
@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层调用这两个数据操作功能,进一步完成功能。

java 复制代码
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;
}

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

相关推荐
Cyan_RA940 分钟前
SpringMVC @RequestMapping的使用演示和细节 详解
java·开发语言·后端·spring·mvc·ssm·springmvc
周杰伦fans3 天前
.net core webapi/mvc阿里云服务器部署 - 错误解决
阿里云·mvc·.netcore
BFT白芙堂3 天前
GRASP 实验室研究 论文解读 | 机器人交互:基于神经网络引导变分推理的快速失配估计
人工智能·神经网络·机器学习·mvc·人机交互·科研教育机器人·具身智能平台
William_cl4 天前
MVC 中 AJAX 与前后端交互深度实战(含独家避坑与场景化方案)
ajax·mvc·交互
Cyan_RA95 天前
SpringMVC 执行流程分析 详解(图解SpringMVC执行流程)
java·人工智能·后端·spring·mvc·ssm·springmvc
hello 早上好5 天前
Spring MVC 类型转换与参数绑定:从架构到实战
spring·架构·mvc
sanggou5 天前
License 集成 Spring Gateway:解决 WebFlux 非阻塞与 Spring MVC Servlet 阻塞兼容问题
spring·gateway·mvc
optimistic_chen6 天前
【Java EE进阶 --- SpringBoot】Spring DI详解
spring boot·笔记·后端·spring·java-ee·mvc·di
速易达网络6 天前
ASP.NET MVC 连接 MySQL 数据库查询示例
数据库·asp.net·mvc
cyforkk6 天前
Spring 异常处理器:从混乱到有序,优雅处理所有异常
java·后端·spring·mvc