Command : 상태(필드, 객체 등)를 [수정]하는 메서드
Query : 상태(필드,객체 등)를 반환하는 메서드
-> 즉 [수정] 메서드를 정의를 할 때를 Command라고 하며,
[수정] 메서드가 아니더라도, 어떠한 메서드에 있어서 무언가를 반환하는 메서드를 Query라고 한다.
- Command와 Query는 철저하게 분리시켜서 설계를 하자 -
public void update(Long id, String name) { // [회원 수정] Rest API
Member findMember = memberRepository.findOne(id);
findMember.setName(name);
// return member;
}
위와 같은 Command가 있다고 하자.
근데 반환형을 void로 말고, Query 형식으로 Member형을 반환하도록 해도 되지 않을까???
-> Command는 [수정] 메서드라고 하였다.
만약 Memer 객체를 반환한다고 해보자.
그러면, update() 메서드는,
1] [수정]을 실행하는 기능
2] id를 통해 상태를 [조회]하는 기능
위 2가지 기능이 같이 구현된 메서드가 되버린다.( Command이면서 Query인 메서드 )
[수정] 메서드이면, 객체나 필드를 변경시키고 끝나야 한다.(이건 개발자마다 생각이 다를 수가 있음)
[조회] 메서드이면, 객체나 필드를 DB로부터 객체 등을 읽어 들여 반환을 하고 끝내야 한다(이건 개발자마다 생각이 다를
수가 있음)
- 고로, [수정] 메서드, 즉 Command는 반환형이 없어야 한다.
( 이 말을, CQS, 즉 Command Query Separation Policy 라고 한다 )
'CS 잡지식' 카테고리의 다른 글
기승전"DB" - 서버의 성능은 [DB]에 의해 결정된다 (0) | 2023.05.03 |
---|---|
Rest API 개발 시, List<E> 등의 [컬렉션]을 [직접] 반환하지 말 것! (0) | 2023.05.03 |
@AllArgsConstructor과 @RequiredConstructor의 차이 (2) | 2023.05.03 |
실무에서 API 개발 시, 주의 사항(Rest API는 절대 [도메인 엔티티]로 Json을 매핑 or 반환해서는 안된다) (3) | 2023.05.03 |
DB에 저장(save)를 하고 나면, 반드시 id값을 반환을 하자!! (0) | 2023.05.03 |