← ClaudeAtlas

cqs-patternslisted

Command Query Separation (CQS) and CQRS patterns for .NET. Use when designing methods, handlers, and application architecture. Ensures predictable, testable code.
aiskillstore/marketplace · ★ 329 · AI & Automation · score 82
Install: claude install-skill aiskillstore/marketplace
# Command Query Separation (CQS) ## The Principle > A method should either be a **Command** that performs an action, or a **Query** that returns data, but not both. ``` ┌─────────────────────────────────────────────────────────┐ │ METHOD │ ├───────────────────────┬─────────────────────────────────┤ │ COMMAND │ QUERY │ ├───────────────────────┼─────────────────────────────────┤ │ - Changes state │ - Returns data │ │ - Returns void │ - No side effects │ │ - "Do something" │ - "Tell me something" │ │ - Imperative verbs │ - Noun or question │ │ (Create, Update, │ (Get, Find, Is, Has, │ │ Delete, Process) │ Calculate, Count) │ └───────────────────────┴─────────────────────────────────┘ ``` --- ## CQS at Method Level ### Violation Examples ```csharp // BAD: Method both modifies state AND returns data public class Stack<T> { public T Pop() // Both removes item AND returns it { var item = _items[_count - 1]; _count--; return item; } } // BAD: Getter with side effects public class Counter { private int _value; public int Value { get { return _value++; } // Query that modifies state! } } // BAD: Command returns data public class UserService { public User CreateUser(string email, string name) // Returns created user