피드로 돌아가기
Dev.toBackend
원문 읽기
60라인의 Monolithic 메서드를 SOLID 원칙으로 분해하여 테스트 가능성 확보
SOLID Principles in C# — I Refactored 60 Ugly Lines, One Rule at a Time
AI 요약
Context
단일 클래스 내 검증, 할인, 결제, DB 저장, 메일 발송 등 6가지 책임이 혼재된 구조의 OrderService 설계. 하드코딩된 외부 Provider 의존성으로 인해 실제 인프라 없이는 테스트가 불가능한 강한 결합 상태의 한계점 노출.
Technical Solution
- SRP 적용을 통한 6개 책임의 Collaborator 분리 및 이해관계자별 도메인 책임 할당
- Strategy Interface 도입을 통한 결제 수단별 switch 문 제거 및 OCP 준수로 확장성 확보
- PaymentResult 타입 정의를 통한 LSP 위반 해결 및 상태 기반의 명확한 반환 값 체계 구축
- IRefundable, IRecurringCapable 등 Capability 기반 Interface 분리를 통한 ISP 적용 및 불필요한 메서드 구현 제거
- Dependency Inversion 적용으로 인프라 의존성을 Abstraction으로 대체하여 단위 테스트 환경 구축
실천 포인트
1. 단일 메서드 내 책임이 3개 이상인지 확인
2. 결제/인증 등 타입별 분기 처리를 Strategy 패턴으로 대체 가능한지 검토
3. Interface가 구현체에 불필요한 메서드를 강제하는지 확인하여 세분화
4. 외부 API/DB 접근 로직을 Interface로 추상화하여 Mocking 가능 여부 검증