Bouncer Pattern (경비원 패턴)
https://www.groovy-lang.org/design-patterns.html#_bouncer_pattern
예외 케이스에 대한 처리를 먼저 진행해서 if의 depth를 최대한 줄이는 패턴.
예를 들어 회원 가입 절차를 진행하는 코드를 아래와 같은 방식으로 만들었다고 가정하면.
1
2
3
4
5
6
7
8
|
public void doStuff(Member member) {
if (member != null) {
if (member.getName() && memberRepository.findById(member.getId()) == null) {
...
}
}
}
|
cs |
비지니스 로직을 구현하다보면 if depth가 점점 깊어져 개발하다보면 실수가 발생할 여지가 생긴다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public void doStuff(Member member) {
if (member == null || member.getEmail() == null) {
throw new IllegalArgumentException();
}
if (memberRepository.findById(member.getId()) {
throw new MemberExistedException();
}
...
}
|
cs |
해당 패턴에서 말하고자하는바는 예외상황이 발생하는 케이스를 먼저 체크하고
비지니스 로직을 구현한다는 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public void doStuff(Member member) {
validateMember(member);
...
}
public void validateMember(Member member) {
if (member == null || member.getEmail() == null) {
throw new IllegalArgumentException();
}
if (memberRepository.findById(member.getId()) {
throw new MemberExistedException();
}
}
|
cs |
물론 처음부터 모든 예외케이스를 체크하기는 상황에 따라 힘들 수 있다.
하지만 순수로직과 예외케이스등의 유효성 검증을 분리한다는점에서 괜찮은 방법이라 생각한다.
평소에 이렇게 코딩을 했는데 BouncerPattern이라는 명칭이 있는지 처음 알게되었다.
'IT팁' 카테고리의 다른 글
FQCN (Fully Qualified Class Name) (0) | 2021.01.03 |
---|---|
Server Side Rendering (0) | 2020.11.04 |
Builder Pattern (0) | 2020.07.18 |
ATDD - 1 (0) | 2020.07.03 |
Intellij 모듈 삭제가 안될때 (1) | 2020.06.29 |