Row Data Gateway는 CRUD 행위만 랩핑했다면, 이놈은 + 도메인 로직까지
Active Record는 데이터베이스의 테이블이나 뷰의 행을 래핑하고, 데이터베이스 접근과 도메인 로직을 모두 포함하는 객체입니다.
도서관의 책을 생각해보세요:
public class User extends ActiveRecord {
private Long id;
private String email;
private String password;
private Date lastLoginDate;
// 데이터베이스 접근 메서드
public void save() {
if (id == null) {
String sql = "INSERT INTO users (email, password) VALUES (?, ?)";
// 저장 로직
} else {
String sql = "UPDATE users SET email = ?, password = ? WHERE id = ?";
// 업데이트 로직
}
}
// 도메인 로직
public boolean isPasswordValid(String inputPassword) {
return this.password.equals(hashPassword(inputPassword));
}
public void updateLastLoginDate() {
this.lastLoginDate = new Date();
this.save();
}
// 비즈니스 규칙
public boolean canResetPassword() {
// 마지막 로그인으로부터 30일 이내인지 확인
return Days.daysBetween(lastLoginDate, new Date()).getDays() <= 30;
}
}