Skip to content

CQRS

CQRS (Command Query Responsibility Segregation) — bu dastur ichida ma’lumotlarni o’zgartirish (Command) va ma’lumotlarni o’qish (Query) operatsiyalarini bir-biridan butunlay ajratish prinsipidir.

Oddiy CRUD (Create, Read, Update, Delete) dasturlarda bitta model ham o’qish, ham yozish uchun ishlatiladi. CQRS da esa ular alohida.

Ma’lumotlarni o’zgartiruvchi amallar. Ular hech narsa qaytarmasligi kerak (yoki faqat status/id).

  • CreateUserCommand
  • UpdateProductPriceCommand

Ma’lumotlarni o’qiydigan amallar. Ular ma’lumotlarni hech qachon o’zgartirmasligi kerak (side-effect yo’q).

  • GetUserByIdQuery
  • GetAllProductsQuery

Ko’pincha CQRS da o’qish va yozish uchun ikki xil ma’lumotlar bazasi ishlatiladi:

  1. Write Database (Master): Yozish uchun optimallashtirilgan (normalized, 3NF).
  2. Read Database (Replica/Projections): O’qish uchun optimallashtirilgan (denormalized, NoSQL).
graph LR
User -->|Command| CommandHandler
CommandHandler --> WriteDB[(Write DB)]
WriteDB -.->|Sync| ReadDB[(Read DB)]
User -->|Query| QueryHandler
QueryHandler --> ReadDB