重构的核心思路,就是把不同职责的方法拆分到独立的类中,每个类只保留一项职责,实现 “高内聚、低耦合”。我们可以按照职责拆分出以下 4 个核心类:

1. 界面交互类:LoginView

只负责登录界面的渲染和用户输入的获取,不处理任何业务逻辑。

java

运行

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

    // 显示登录界面,获取用户输入
    public Map<String, String> display() {
        System.out.println("显示登录界面,等待用户输入");
        // 模拟获取用户输入
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入用户名:");
        String username = scanner.nextLine();
        System.out.print("请输入密码:");
        String password = scanner.nextLine();
        Map<String, String> input = new HashMap<>();
        input.put("username", username);
        input.put("password", password);
        return input;
    }
}

2. 业务验证类:LoginValidator

只负责用户输入的合法性验证,不关心界面和数据库操作。

java

运行

public class LoginValidator {
    // 验证用户名和密码的格式合法性
    public boolean validate(String username, String password) {
        // 用户名非空、长度校验
        if (username == null || username.length() < 4) {
            System.out.println("用户名不合法,长度不能少于4位");
            return false;
        }
        // 密码非空、复杂度校验
        if (password == null || password.length() < 6) {
            System.out.println("密码不合法,长度不能少于6位");
            return false;
        }
        return true;
    }
}

3. 数据访问类:UserRepository

只负责数据库连接和用户数据查询,不处理业务验证和界面交互。

java

运行

public class UserRepository {
    // 获取数据库连接
    public Connection getConnection() {
        System.out.println("获取数据库连接");
        // 实际项目中替换为JDBC或连接池获取连接的逻辑
        return null;
    }

    // 根据用户名和密码查询用户是否存在
    public boolean findUser(String username, String password) {
        Connection connection = getConnection();
        System.out.println("根据用户名和密码查询用户信息");
        // 模拟数据库查询逻辑
        return "admin".equals(username) && "123456".equals(password);
    }
}

4. 流程控制类:LoginController

只负责登录流程的调度,不处理具体的界面、验证和数据库操作。

java

运行

public class LoginController {
    private LoginView loginView;
    private LoginValidator loginValidator;
    private UserRepository userRepository;

    // 依赖注入,降低耦合
    public LoginController(LoginView loginView, LoginValidator loginValidator, UserRepository userRepository) {
        this.loginView = loginView;
        this.loginValidator = loginValidator;
        this.userRepository = userRepository;
    }

    // 登录流程控制
    public void login() {
        // 1. 初始化界面
        loginView.init();
        // 2. 获取用户输入
        Map<String, String> userInput = loginView.display();
        String username = userInput.get("username");
        String password = userInput.get("password");
        // 3. 验证输入合法性
        if (!loginValidator.validate(username, password)) {
            System.out.println("登录失败:输入不合法");
            return;
        }
        // 4. 查询用户信息
        if (userRepository.findUser(username, password)) {
            System.out.println("登录成功!");
        } else {
            System.out.println("登录失败:用户名或密码错误");
        }
    }

    // 程序入口
    public static void main(String[] args) {
        // 实例化各职责类
        LoginView view = new LoginView();
        LoginValidator validator = new LoginValidator();
        UserRepository repository = new UserRepository();
        // 实例化控制器,注入依赖
        LoginController controller = new LoginController(view, validator, repository);
        // 启动登录流程
        controller.login();
    }
}

更多推荐