初识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_RA93 天前
SpringMVC 请求数据绑定与参数映射 详解
java·后端·spring·mvc·springmvc·映射请求数据
Cyan_RA95 天前
SpringMVC REST 详解
java·spring·mvc·springmvc·restful·jquery·jsp
budingxiaomoli8 天前
Spring Web MVC 知识总结
spring·mvc
虾米Life9 天前
MVC与MVVM 架构
架构·mvc·mvvm
笛卡尔的心跳11 天前
Spring MVC 注解
java·spring·mvc
小松加哲12 天前
Spring MVC 核心原理全解析
java·spring·mvc
那个失眠的夜12 天前
RESTful 语法规范 核心注解详解
java·spring·mvc·mybatis
羌俊恩12 天前
Centos环境django项目部署过程
django·flask·centos·mvc·mtv·web项目框架
Foreer黑爷14 天前
Spring MVC原理与源码:从请求到响应的全流程解析
java·spring·mvc
曹牧15 天前
Spring MVC中使用HttpServletRequest和HttpServletResponse
java·spring·mvc