CodeBlanks Logo Icon CodeBlanks

CQRS

CQRS desenini öğrenirsin.

CQRS nedir?

CQRS (Command Query Responsibility Segregation), yazma (command) ve okuma (query) modellerini ayırır. Komutlar durumu değiştirir, sorgular durumu okur. İki model ayrı veritabanlarında ya da ayrı tablo kümelerinde tutulabilir.

Bir cqrsModel(cmd, query) fonksiyonu bu ayrımı modeller: {command: cmd, query: query} nesnesi döndürür. Örnek: cqrsModel('CreateUser', 'GetUser') {command: 'CreateUser', query: 'GetUser'} döndürür. Komut ve sorgu ayrımı, okuma tarafının optimize edilmesini (örneğin materialized view) sağlar. Event sourcing ile birlikte kullanıldığında komutlar olay üretir, sorgular olaylardan türetilmiş görünümden okur.

Komut ve sorgu ayrımı

Bir komut (command) durumu değiştirir: CreateUser, UpdateOrder. Bir sorgu (query) durumu okur: GetUser, ListOrders. CQRS bu iki tarafı ayrı modellerle yönetir; böylece her taraf kendi ihtiyacına göre optimize edilir.

Örnek: cqrsModel('CreateUser', 'GetUser') iki alanı da ayrı tutar. Yazma tarafı normalize edilmiş tablolar, okuma tarafı materialized view kullanabilir. model.command yazma işini, model.query okuma işini işaret eder. Bu ayrım, özellikle okumanın çok daha sık olduğu sistemlerde (örneğin sosyal akış) performans kazandırır. Event sourcing ile birleşince komutlar olay üretir, sorgular bu olaylardan türetilmiş görünümden okur.

Uygulama CQRS model fonksiyonu yaz

function cqrsModel(cmd, query) yaz. return { command: cmd, query: query } ile döndür. const model = cqrsModel('CreateUser', 'GetUser') tanımla. console.log(model.command) ve console.log(model.query) yazdır.

Başlangıç kodu

index.js
// cqrsModel fonksiyonu yaz
// komut ve sorgu alan bir nesne döndürsün
// 'CreateUser' ve 'GetUser' ile çağır, iki özelliği yazdır
// buraya yaz

Örnek çözüm

index.js
function cqrsModel(cmd, query) {
  return { command: cmd, query: query };
}
const model = cqrsModel('CreateUser', 'GetUser');
console.log(model.command);
console.log(model.query);

Beklenen çıktı

CreateUser
GetUser

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Nesne özelliğini tamamla

Soru
return { command: cmd, ____: query };
Cevap
return { command: cmd, query: query };

Açıklama: Sorgu özelliği 'query' adını taşır.

2 CQRS neyi ayırır?

index.js
cqrsModel('CreateUser', 'GetUser')
  • Yazma ve silme
  • Veritabanı ve tablo
  • Sunucu ve istemci
  • Komut ve sorgu Doğru cevap

Açıklama: CQRS komut (yazma) ve sorgu (okuma) modellerini ayırır.

3 Parçayı rolüne eşle

Kavram Anlamı
command Durumu değiştirir
query Durumu okur
CreateUser Bir komut
GetUser Bir sorgu

Uzman bölümündeki tüm dersler