从 “臃肿登录类” 到 “职责分明架构”:用单一职责原则重构 Java 登录功能
·
重构的核心思路,就是把不同职责的方法拆分到独立的类中,每个类只保留一项职责,实现 “高内聚、低耦合”。我们可以按照职责拆分出以下 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();
}
}更多推荐
所有评论(0)