浅析MVC分层架构的层次划分

早期分层——[M - V - C]:

MVC框架强制性的把各层的实现功能划分开,各自处理各自的任务,利于解耦和,极大的增强了代码的可读性、维护性。

  • M(Model)模型层——与数据库交互的数据模型,进行数据相关操作
  • V(View)视图层——与用户交互的数据区,负责收集展示数据
  • C(Controller)控制层——收到请求后,调用模型层与数据库交互获取数据,最后将数据返回给视图层(用户)—— 负责接收数据和逻辑处理
当用户通过浏览器发送请求到视图层(view)时,控制层(controller)分发调用模型层(model),进行数据库查询,(如果查询失败便新建),接下来,模型层(model)再将数据库查询到的数据返回给控制层(controller),控制层(controller)再将其返回给视图层(view),view层通过web页面把数据信息显示给用户。

目前市面上流行的实际分层方式[D - V - C+S]:

  • D(Dao)数据访问层(持久化层)——数据的增删改查,与数据库建立连接;封装了对数据库的curd操作

  • V(View)视图层——与用户交互的数据区

  • C(Controller)控制层——1、接收用户传递过来的数据,将数据封装到实体类中 2、调用业务逻辑层,处理进行业务逻辑的处理 3、根据业务逻辑层返回的结果,进行不同的页面跳转(显示)

  • S(Service)业务逻辑层——做一些业务逻辑地处理,并给控制层返回结果

  • 另外,由工具层(util),实体类层(model/po/pojo)(——JavaBean只有私有的成员变量和getter/setter方法),公共层被其他层调用,为其提供服务

【note】最大的变化就是 controller 层划分为了 controller + service 两层 —— 由 c 层控制、负责接收数据和逻辑处理 —> s 层处理逻辑业务 + c 层接收并筛选数据

接下来就大致模拟一个前台买家登陆注册系统,来感受一下MVC分层的优势:

  • controller层
    1.主要是接收用户传递过来的数据,将数据封装到实体类中
    2.调用业务逻辑层,进行业务逻辑的处理
    3. 根据业务逻辑层返回的结果,进行不同页面跳转(显示)
import java.util.Scanner;

public class UserController {
    UserService us = new UserService();
 //   GoodsService gs = new GoodsService();
    Scanner in = new Scanner(System.in);
    public void regist(){
        System.out.println("************欢迎进入用户注册模块****************");
        //接收用户输入的数据
        System.out.println("请输入用户名:");
        String username = in.next();
        System.out.println("请输入密码");
        String password = in.next();
        System.out.println("请输入手机号:");
        String phone = in.next();
        System.out.println("请输入Email:");
        String email = in.next();
        //将数据封装到实体类中(User)
        User user = new User(username,password,phone,email);
       us.regist(user);
    }

    public void login(){
        System.out.println("欢迎进入用户登录模块");
        System.out.println("请输入用户名:");
        String username = in.next();
        System.out.println("请输入密码:");
        String password = in.next();

        boolean flag = us.login(username,password);

        if(flag){

            System.out.println("登录成功");
           // Goods[] goodss = gs.getAllGoods();


        }else {
            System.out.println("用户名或者密码错误");
        }
    }
}
  • service层
    1、做一些业务逻辑的处理,并给控制层返回结果
    2、service层调用dao层
public class UserService {
    UserDao userDao = new UserDao();
    public void regist(User user){
        boolean flag1 = CheckUtil.noNullCheck(user.getUsername());
        if(!flag1){
            System.out.println("用户名不能为空");
            return;
        }
        boolean flag = UserDB.contain(user.getUsername());
        if(flag){
            System.out.println("用户名已存在,不能注册");
            return;
        }
        userDao.save(user);
        userDao.printUsers();
    }
    public boolean login(String username,String password){
        return userDao.checkLogin(username,password);
    }
}

  • dao层
    数据的增删改查
public class UserDao {
    public void save(User user){
    UserDB.saveUser(user);
    }
    public void printUsers(){
        for(int i = 0; i < UserDB.user_count;i++){
            User user1 = UserDB.USER_TABLE[i];
            System.out.println(user1.getUsername() + "," + user1.getPassword() + "," + user1.getPhone());
        }
    }

    //登录的dao层实现
    public boolean checkLogin(String username,String password){
        return UserDB.checkLogin(username,password);
    }
}

  • po层
//Goods类
public class Goods {
    private int goodsId;
    private String goodsName;
    private String goodsDesc;
    private double goodsPrice;

    public Goods(int goodsId, String goodsName, String goodsDesc, double goodsPrice) {
        this.goodsId = goodsId;
        this.goodsName = goodsName;
        this.goodsDesc = goodsDesc;
        this.goodsPrice = goodsPrice;
    }

    public int getGoodsId() {
        return goodsId;
    }

    public void setGoodsId(int goodsId) {
        this.goodsId = goodsId;
    }

    public String getGoodsName() {
        return goodsName;
    }

    public void setGoodsName(String goodsName) {
        this.goodsName = goodsName;
    }

    public String getGoodsDesc() {
        return goodsDesc;
    }

    public void setGoodsDesc(String goodsDesc) {
        this.goodsDesc = goodsDesc;
    }

    public double getGoodsPrice() {
        return goodsPrice;
    }

    public void setGoodsPrice(double goodsPrice) {
        this.goodsPrice = goodsPrice;
    }
}

//User类
public class User {
    private String username;
    private String password;
    private String phone;
    private String email;

    public User(){}
    public User(String username, String password, String phone, String email) {
        this.username = username;
        this.password = password;
        this.phone = phone;
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

  • util层
//Checkutil 类
public class CheckUtil {
    public static boolean noNullCheck(String str){
        if("".equals(str)){
            return false;
        }
        return true;
    }
}

//GoodsDB 类
public class GoodsDB {
    public static final  Goods[] GOODS_TABLE = new Goods[100];
    public static int goods_count;
    static {
        //GOODS_TABLE[1] = new Goods(传参);
    }
}

//MyArray 类
public class MyArray {
    private Object[] objs;
}

//UserDB 类
public class UserDB {
    public static final  User[] USER_TABLE = new User[100];
    public static int user_count;
    public static void saveUser(User user){
        USER_TABLE[user_count++] = user;
    }
    public static boolean contain(String username){
        for(int i = 0; i < user_count; i++){           if(username.equals(USER_TABLE[i].getUsername())){
                return true;
            }
        }
        return false;
    }
    public static boolean checkLogin(String username,String password){
        for(int i = 0; i < user_count; i++){
            if(username.equals(USER_TABLE[i].getUsername()) && password.equals(USER_TABLE[i].getPassword())){                return true;
            }
        }
        return false;
    }
}

  • main函数
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {    System.out.println("****************************************");
        System.out.println("*                                      *");
        System.out.println("*           欢迎来到睿乐购              *");
        System.out.println("*                                      *");       System.out.println("****************************************");
        System.out.println("系统功能:1:用户注册,2:用户登录,-1:退出系统");
        while(true){
            System.out.println("请选择功能");
            Scanner in = new Scanner(System.in);
            int func = in.nextInt();
            //退出系统
            if(func == -1){
                break;
            }
            switch (func){
                case 1: {  //用户注册
                    //调用控制层
                    UserController c = new UserController();
                    c.regist();
                    break;
                }case 2: { //用户登录
                    break;
                }default:
                    System.out.println("您输入的信息有误,再好好看,重新输入");
            }
        }
    }
}

你可能感兴趣的:(Java互联网架构学习笔记)