Row Data Gateway는 CRUD 행위만 랩핑했다면, 이놈은 + 도메인 로직까지

image.png

Active Record

개요

Active Record는 데이터베이스의 테이블이나 뷰의 행을 래핑하고, 데이터베이스 접근과 도메인 로직을 모두 포함하는 객체입니다.

실생활 비유

도서관의 책을 생각해보세요:

Row Data Gateway와의 차이점

코드 예시

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;
    }
}

장점

단점