최근에 알게된 CQS 원칙에 대하여 정리해놓으려 합니다.
영어로는 Command Query Separation입니다.
한글로는 명령과 조회는 분리되어야 한다는 뜻입니다.
저는 Command(set)과 Query(get)은 분리되어야 한다는 것으로 이해하였습니다.
Command(set)을 할때 요청에 대한 결과를 return하지 않는 것이 대표적인 적용 예시 일것 같습니다.
아래는 개선 전
class People {
constructor(name) {
this.name = name;
}
setName(newName){
this.name = newName;
return this.name
}
}
const test = new People('test');
console.log(test.setName("123")) // "123"
console.log(test) // People {name: "123"}
아래는 개선 후 입니다.
class People {
constructor(name) {
this.name = name;
}
getName() {
return this.name;
}
setName(newName){
this.name = newName;
}
}
const test = new People('test');
console.log(test.setName("123")) // undefined
console.log(test.getName()) // "123"
console.log(test) // People {name: "123"}
쿼리는 조회만을 하기 때문에 side effect를 발생시키지 않지만
커맨드는 상태를 변경시키기 때문에 side effect을 주의하여야 합니다.
그러므로 둘의 역할을 분리하는 것이 나중을 위해 좋습니다.
나중을 위해 좋은 내용은 아래에 있습니다!
이러한 원칙을 적용하면서 기대할 수 있는 효과는 어떤 것이 있을까요??
1. 디버깅이 편리해 집니다.
2. 각 메소드의 의미가 더 명확해 집니다.
3. 결국 유지보수가 편리해 집니다.
이 원칙은 가능하면 지키는것이 좋지만 예외가 필요할 때는 예외를 허용하는 것이 좋다고 합니다.
ex) 1. api 요청에서 put or patch를 이용할때 데이터를 update후에 변경된 데이터를 response로 반환하는 경우
2. 자료구조 stack에서 pop을 하면 stack은 상태가 변경되고 가장 나중에 들어온 값을 반환해 줍니다.
이러한 경우또한 예외상황이 될것 같습니다.
stack = [1,2,3,4,5]
print(stack.pop()) # 5
print(stack) # [1,2,3,4]
출처 : https://dundung.tistory.com/183
'CS' 카테고리의 다른 글
디자인 패턴/싱글턴 패턴 🆘 (0) | 2022.04.20 |
---|---|
멀티 프로세스, 싱글 스레드, 멀티 스레드 🔥 (0) | 2022.03.30 |
프로세스, 스레드 🔥 (0) | 2022.03.30 |
컴퓨터는 어떻게 켜질까?[컴퓨터 부팅 과정] (2) | 2021.12.12 |