使用单一职责原则对某基于java的C/S系统的“登录功能”进行重构
重构核心方案(按单一职责原则拆分)
将原Login类拆分为 4 个职责单一的类:
| 拆分后的类 | 核心职责 | 包含方法 |
|---|---|---|
LoginView |
界面交互与输入输出 | init()、display() |
LoginValidator |
登录业务逻辑校验 | validate() |
UserDAO |
数据库操作 | getConnection()、findUser() |
LoginApp |
程序入口与流程控制 |
|
重构后完整代码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);
}
}
更多推荐
所有评论(0)