CQS (Command Query Separation) — это принцип проектирования, предложенный Бертраном Мейером (автором языка Eiffel), согласно которому методы объекта должны быть либо командой, либо запросом, но не одновременно.
Каждый метод должен быть либо:
Командой — изменяет состояние объекта, но не возвращает значение.
Запросом — возвращает данные, но не изменяет состояние.
# Нарушает CQS:
def withdraw(amount):
balance -= amount
return balance # и меняет, и возвращает
# Соответствует CQS:
def withdraw(amount):
balance -= amount # команда
def get_balance():
return balance # запрос