-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
상황 설명
투표 참여 기능을 개발 중인데, 예외 처리에 대한 고민이 생겼다. 기능의 규칙은 다음과 같다.
사용자는 오직 진행 중인 투표에만 참여할 수 있어야 한다. 사용자가 이미 종료된 투표에 참여하려고 시도한다면, 이때 예외를 발생시켜야 한다. 이런 상황에서, 예외 발생은 도메인과 서비스 중 어느 곳에서 처리해야 하는 것이 적절할까?
예시는 실제 로직보다 간소화했습니다.
1. 도메인에서 예외 발생
Vote
public void validateVoting() {
final LocalDateTime now = LocalDateTime.now();
if (this.endTime.isAfter(now)) {
throw new BusinessException(ErrorCode.VOTE_CANNOT_PARTICIPATE);
}
}
VoteService
public void participateVote(
final Long voteId,
final Long itemId,
final Long memberId,
) {
final Vote vote = voteReader.read(voteId);
vote.validateVoting();
voteManager.participate(vote, memberId, itemId);
}
2. 서비스에서 예외 발생
Vote
public boolean isVoting() {
final LocalDateTime now = LocalDateTime.now();
return this.endTime.isAfter(now);
}
VoteService
public void participateVote(
final Long voteId,
final Long itemId,
final Long memberId,
) {
final Vote vote = voteReader.read(voteId);
if (!vote.isVoting()) {
throw new BusinessException(ErrorCode.VOTE_CANNOT_PARTICIPATE);
}
voteManager.participate(vote, memberId, itemId);
}
Reactions are currently unavailable