변경 이유 분리
UserView UserRepository
표시, 저장, 검증 책임을 나누면 UI 변경과 데이터 저장 변경이 서로 흔들리지 않습니다.
TypeScript의 인터페이스, 작은 계약, 생성자 주입은 설계 원칙을 코드가 확인할 수 있는 구조로 바꾸는 도구입니다.
UserView UserRepository
표시, 저장, 검증 책임을 나누면 UI 변경과 데이터 저장 변경이 서로 흔들리지 않습니다.
IDiscountStrategy
새 할인 정책은 구현체 추가로 끝나고, 계산기 코드는 기존 계약만 바라봅니다.
Flyable Walkable
날 수 없는 대상에게 fly를 강요하지 않으면 기반 타입을 대체해도 런타임 예외가 줄어듭니다.
Codeable Managable
클라이언트가 쓰지 않는 메서드를 구현하지 않아도 되도록 역할별 계약을 작게 나눕니다.
constructor(logger: ILogger)
결제 처리 코드는 파일 로거나 데이터베이스 로거가 아니라 ILogger 계약에 의존합니다.
컴파일러가 설계를 대신 해주지는 않지만, 한 번 정한 계약을 잘못 쓰는 지점을 실행 전에 드러내 설계 원칙이 코드에 남도록 돕습니다.