重构核心方案(按单一职责原则拆分)

将原Login类拆分为 4 个职责单一的类:

拆分后的类 核心职责 包含方法
LoginView 界面交互与输入输出 init()display()
LoginValidator 登录业务逻辑校验 validate()
UserDAO 数据库操作 getConnection()findUser()
LoginApp 程序入口与流程控制

main(String args[])

重构后完整代码1. LoginView.java(视图层)

public class LoginView {
    public void init() {
        System.out.println("===== 登录界面初始化 =====");
    }

    public String[] display() {
        java.util.Scanner sc = new java.util.Scanner(System.in);
        System.out.print("用户名:");
        String username = sc.nextLine();
        System.out.print("密码:");
        String password = sc.nextLine();
        return new String[]{username, password};
    }

    public void showResult(boolean success) {
        System.out.println(success ? "登录成功" : "登录失败");
    }
}

2. LoginValidator.java(业务逻辑层)

public class LoginValidator {
    private UserDAO dao = new UserDAO();

    public boolean validate(String username, String password) {
        if (username == null || username.isBlank() || password == null || password.length() < 6) {
            return false;
        }
        return dao.findUser(username, password);
    }
}

3. UserDAO.java(数据访问层)

import java.sql.*;

public class UserDAO {
    private static final String URL = "jdbc:mysql://localhost:3306/test";
    private static final String USER = "root";
    private static final String PWD = "root";

    public Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USER, PWD);
    }

    public boolean findUser(String username, String password) {
        String sql = "SELECT 1 FROM user WHERE username=? AND password=?";
        try (Connection conn = getConnection();
             PreparedStatement pstmt = conn.prepareStatement(sql)) {
            pstmt.setString(1, username);
            pstmt.setString(2, password);
            ResultSet rs = pstmt.executeQuery();
            return rs.next();
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }
}

4. LoginApp.java(程序入口)

public class LoginApp {
    public static void main(String[] args) {
        LoginView view = new LoginView();
        LoginValidator validator = new LoginValidator();

        view.init();
        String[] userInfo = view.display();
        boolean success = validator.validate(userInfo[0], userInfo[1]);
        view.showResult(success);
    }
}

更多推荐