Simple Decorators with SimpleDelegator: Clean Code in Ruby o

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 제거

  • ApplicationRecordDecoratable 모듈 포함
  • method_missing 메서드를 통해 데코레이터 메서드 자동 호출
  • decorator_class 메서드로 동적 데코레이터 생성
  • decorated_instance 메서드로 데코레이터 인스턴스 생성

4. 데코레이터 적용 효과

  • @posts = Post.all 형식으로 데코레이터 호출 가능
  • post.author.full_name처럼 모델 메서드처럼 사용 가능
  • 모델과 데코레이터 간 직접 연결로 코드 간결성 및 유지보수성 향상

결론

  • Decoratable 모듈을 통해 데코레이터 호출의 boilerplate를 제거하고, 모델과 데코레이터 간 자동 연결 가능
  • SimpleDelegator + method_missing을 활용한 방식은 유지보수성과 코드 가독성 향상에 유리
  • Ruby on Rails 애플리케이션에서 모델 로직과 프레젠테이션 로직 분리 시 실용적 구현 방법