State Pattern
게시글 상태 전이 설계 기준
게시글 상태 패턴은 런타임 상태 객체로 분기할 수도 있고, 타입 자체를 상태로 나눠 잘못된 호출을 컴파일 타임에 막을 수도 있습니다.
전이는 같고, 검사 위치가 다릅니다
객체 방식은 런타임, type-state 방식은 컴파일 타임에 규칙을 둡니다.
Draft -> Review -> Published
hidden
Draft
content()는 빈 문자열
request_review()
locked
Review
검토 중, 아직 비공개
approve()
visible
Published
content()가 본문 반환
잘못된 호출
Draft에서 content 공개 / Review 없이 publish
어느 방식이 이 규칙을 어디서 막는지가 선택 기준입니다.
비교 축: 유연성 vs 컴파일 차단
runtime object
Box<dyn State>
상태 추가와 전이 변경이 쉽지만, 잘못된 호출은 런타임 규칙으로 처리합니다.
전이 위치
State trait 구현 안에서 다음 상태를 반환
본문 공개
상태 객체의 content()가 공개 여부를 결정
type-state
DraftPost -> PendingPost -> Post
타입별 impl로 허용 메서드를 나누어 잘못된 순서를 컴파일 전에 막습니다.
전이 위치
메서드가 다른 타입을 소비하고 새 타입을 반환
본문 공개
Published 타입에만 content()를 제공