명령 쿼리 분리 (CQS)는 코드베이스의 명확성과 단순성을 촉진하는 소프트웨어 설계의 기본 원칙입니다. Bertrand Meyer가 만들어 낸 원칙은 시스템의 모든 방법이 작업 (명령) 또는 반환 데이터 (쿼리)를 수행해야하지만 결코 둘 다를 수행해야한다고 말합니다. 이 차이점은 코드가 이해, 테스트 및 유지하기 쉽도록 보장합니다.
이 블로그 게시물에서는 CQ의 주요 측면, 구현 방법 및 소프트웨어 개발에 제공하는 이점을 살펴 봅니다. 또한 API 디자인 및 데이터베이스 상호 작용과 같은 실제 시나리오에서 CQ를 적용하는 예를 제공합니다.
1️& CQS의 기본 이해
핵심에서 CQS는 기능을 두 가지 범주로 분리합니다.
✓ 명령 : 시스템 상태를 변경하지만 값을 반환하는 작업을 수행합니다 (예 : 데이터베이스 업데이트 또는 이메일 보내기).
✓ 쿼리 : 시스템 상태를 변경하지 않고 데이터 검색 (예 : 데이터베이스에서 사용자 세부 정보를 가져 오기).
이 분리는 코드에 대한 추론을 단순화하고 의도하지 않은 부작용을 피합니다.
2el 2 CQS 사용의 이점
개선 된 코드 가독성 : 명령과 쿼리의 명확한 차이로 인해 코드가 이해하기 쉽습니다.
부작용 감소 : 쿼리는 상태를 수정하지 않아 예측 가능한 동작을 보장합니다.
쉬운 테스트 : 명령 및 쿼리를 독립적으로 테스트 할 수있어 테스트 사례의 복잡성이 줄어 듭니다.
확장 가능한 디자인 : 모듈 식 및 분리 된 코드를 장려하여 시스템을보다 쉽게 확장하고 확장 할 수 있습니다.
3️& 실제로 CQ를 구현
예 : Express.js API
CQS 원칙을 Express.js 응용 프로그램에 적용하자 :
? CQ없이 :
app.post('/user', (req, res) => { const user = createUser(req.body); // Command res.json(user); // Query });
? CQS :
app.post('/user', (req, res) => { createUser(req.body); // Command res.sendStatus(201); }); app.get('/user/:id', (req, res) => { const user = getUser(req.params.id); // Query res.json(user); });
여기, 명령 (CreateUser) 및 쿼리 (getUser)가 분리되어 각 기능의 책임이 더 명확 해집니다.
4️& 도전과 솔루션
레거시 코드와 통합 : 기존 코드베이스에서 CQ를 채택하려면 리팩토링이 필요할 수 있습니다. 새로운 기능이나 중요한 구성 요소에 중점을 둔 작게 시작하십시오.
성능 오버 헤드 : CQ에 대한 엄격한 준수는 때때로 추가 기능 호출로 이어질 수 있습니다. 선명도와 성능의 균형을 맞추기 위해 선택적으로 최적화하십시오.
결론
명령 쿼리 분리는 소프트웨어 설계의 명확성과 유지 가능성을 조성하는 간단하지만 강력한 원칙입니다. 이 접근법을 수용하면 추론, 규모 및 테스트가 더 쉬운 시스템을 만들 수 있습니다. API를 설계하거나 도메인 로직 구현 또는 데이터베이스 상호 작용 관리에 관계없이 CQS는 최신 소프트웨어 엔지니어링을위한 유용한 도구입니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3