Simple Decorators with SimpleDelegator
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
Ruby on Rails 개발자, 모델 로직과 프레젠테이션 로직 분리가 필요한 중급 이상 개발자
핵심 요약
SimpleDelegator
를 사용해 모델의 프레젠테이션 로직을 분리하여 코드 가독성 향상method_missing
메서드를 통해 데코레이터 호출의 불필요한 boilerplate 제거Decoratable
모듈을 통해 모델과 데코레이터 간 자동 연결 구현, 유지보수성 개선
섹션별 세부 요약
1. 데코레이터 패턴 소개
- 데코레이터는 모델의 핵심 로직과 프레젠테이션 로직을 분리하는 패턴
- 예시:
Post
모델의status
열에 대한 색상 매핑,Author
모델의full_name
생성 SimpleDelegator
를 상속한PostDecorator
,AuthorDecorator
클래스 구현
2. 데코레이터 초기 구현
PostDecorator
클래스에서status_color
메서드 정의AuthorDecorator
클래스에서full_name
메서드 정의Post.all.map { PostDecorator.new(it) }
형식으로 데코레이터 사용
3. `method_missing`을 통한 boilerplate 제거
ApplicationRecord
에Decoratable
모듈 포함method_missing
메서드를 통해 데코레이터 메서드 자동 호출decorator_class
메서드로 동적 데코레이터 생성decorated_instance
메서드로 데코레이터 인스턴스 생성
4. 데코레이터 적용 효과
@posts = Post.all
형식으로 데코레이터 호출 가능post.author.full_name
처럼 모델 메서드처럼 사용 가능- 모델과 데코레이터 간 직접 연결로 코드 간결성 및 유지보수성 향상
결론
Decoratable
모듈을 통해 데코레이터 호출의 boilerplate를 제거하고, 모델과 데코레이터 간 자동 연결 가능SimpleDelegator
+method_missing
을 활용한 방식은 유지보수성과 코드 가독성 향상에 유리- Ruby on Rails 애플리케이션에서 모델 로직과 프레젠테이션 로직 분리 시 실용적 구현 방법