1. 로직 분리 및 책임 명확화 패턴
-
Service Object: 복잡한 비즈니스 로직을 모델이나 컨트롤러에서 추출하여 단일 책임을 가진 Ruby 객체로 정의합니다. 이를 통해 ‘Fat Model’ 문제를 해결하고 테스트 용이성을 높입니다.
-
Presenter: 뷰에 포함된 복잡한 조건문이나 포맷팅 로직을 캡슐화하여 뷰를 깨끗하게 유지하고 UI 로직을 독립적으로 관리합니다.
-
Form Object: 여러 모델이 연관된 복잡한 폼 데이터 처리 및 유효성 검사를 전담하여 컨트롤러의 부담을 줄이고 데이터 무결성을 보장합니다.
2. 데이터 접근 및 권한 관리 패턴
-
Query Object: 복잡한 SQL 쿼리나 ActiveRecord 체인을 전용 객체로 분리하여 쿼리 로직의 재사용성과 가독성을 향상시킵니다.
-
Policy: 권한 부여(Authorization) 규칙을 별도 객체로 통합하여 컨트롤러나 모델에 흩어져 있는 보안 로직을 일관성 있게 관리합니다.
-
Repository: 데이터 접근 로직을 비즈니스 로직과 분리하여 데이터 소스 변경 시 유연하게 대응할 수 있는 계층을 제공합니다.
3. 유연한 구조 설계를 위한 기타 패턴
-
Observer & Command: 컴포넌트 간 결합도를 낮추는 이벤트 기반 구조를 설계하거나, 특정 요청을 객체화하여 워크플로우의 실행과 기록을 체계화합니다.
-
Builder & Null Object: 복잡한 객체 생성 과정을 단계별로 제어하거나, 불필요한 nil 체크를 방지하기 위해 기본 동작을 정의한 객체를 사용하여 코드 안정성을 확보합니다.