CQRS Kavramları
Açıklık için komutları sorgulardan ayırın.
CQRS Kavramları, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.
CQRS Nedir?
CQRS, Komut-Sorgu Sorumluluk Ayrımı anlamına gelir. Fikir basittir: durumu değiştiren kodu (komutlar), durumu okuyan koddan (sorgular) ayırın.
// Commands : change state, return little or nothing
// Queries : return data, change nothingKomutlar
Bir komut, sistemi değiştirme amacını ifade eder; bir order oluşturmak veya aboneliği iptal etmek gibi. Emir kipinde adlandırılır ve genellikle yalnızca bir kimlik ya da hiçbir şey döndürmez.
public record CreateOrderCommand(int CustomerId, string[] Items);
public record CancelOrderCommand(int OrderId);Sorgular
Bir sorgu, yan etki oluşturmadan veri ister. Döndürdüğü şeyin adına göre adlandırılır ve gerekli filtre parametrelerini taşır.
public record GetOrderByIdQuery(int OrderId);
public record ListOrdersQuery(int CustomerId, int Page);Neden Ayırmalı?
Okuma ve yazma işlemlerinin gereksinimleri farklıdır:
- Okumaların hızlı, normalleştirilmemiş ve önbelleğe uygun olması istenir.
- Yazma işlemlerinde doğrulama, iş kuralları ve tutarlılık gerekir.
Bu işlemleri ayırmak, her tarafın bağımsız olarak gelişmesini ve ölçeklenmesini sağlar.
// Read side -> optimized projections / DTOs
// Write side -> domain rules / transactionsHandler Deseni
Her komut veya sorgu, özel bir handler tarafından işlenir. Bir ileti, bir handler ve bir sorumluluk; bu yapı sınıfları küçük ve odaklanmış tutar.
// CreateOrderCommand -> CreateOrderHandler
// GetOrderByIdQuery -> GetOrderByIdHandlerİnce Denetleyiciler
CQRS ile denetleyiciler incelir. Bir ileti oluşturup gönderirler; tüm mantık handler içinde bulunur. Bu yaklaşım şişkin denetleyicileri ortadan kaldırır ve test edilebilirliği artırır.
[HttpPost]
public async Task<IActionResult> Create(CreateOrderCommand cmd)
{
var id = await _sender.Send(cmd);
return CreatedAtAction(nameof(Get), new { id }, null);
}CQRS, Olay Kaynaklamayla Aynı Değildir
Yaygın bir karışıklık vardır: CQRS yalnızca okuma ve yazma ayrımıdır. Olay kaynaklama (durumu olay günlüğü olarak saklama), CQRS ile iyi eşleşen ancak zorunlu olmayan ayrı bir desendir.
// You can do CQRS with a plain single database.Tek ve Ayrı Veri Depoları
Temel CQRS, her iki taraf için tek bir veritabanı kullanır. Gelişmiş kurulumlarda, ölçeklenebilirlik için nihai tutarlılığı kabul ederek eşzamanlı tutulan ayrı okuma ve yazma depoları kullanılır. Basit başlayın.
// Level 1: one DB, separate handlers (most apps)
// Level 2: separate read/write models
// Level 3: separate read/write databasesAvantajlar
CQRS size şunları sağlar:
- Net ve tek amaca sahip handler'lar.
- Daha kolay test; her handler ayrı ayrı test edilir.
- Farklı alanları ilgilendiren kaygılar için doğal bir yer (doğrulama, günlükleme).
- Okuma ve yazma işlemlerinin bağımsız olarak ölçeklenmesi.
// One class per use case = easy to find and testMaliyetler
CQRS, daha fazla sınıf ve dolaylılık ekler. Basit bir CRUD uygulaması için gereğinden karmaşık olabilir. İş mantığının zengin veya alanın karmaşık olduğu yerlerde uygulayın.
// Trade-off: clarity & scale vs. boilerplateMediatR'ı Kullanma
MediatR kitaplığı, her iletiyi elle bağlamanıza gerek kalmadan ilgili handler'a gönderen işlem içi aracı desenini uygular. Kursun geri kalanında bu kitaplık kullanılacaktır.
dotnet add package MediatRHızlı Kontrol
Temel ayrımı doğrulayın.
Özet
CQRS kavramlarını öğrendiniz:
- Komutları (durum değişiklikleri), sorgulardan (okumalardan) ayırın.
- Her ileti, denetleyicileri ince tutan tek ve odaklanmış bir handler içerir.
- CQRS, olay kaynaklamadan bağımsızdır ve tek bir veritabanı kullanabilir.
- MediatR, iletileri handler'lara gönderir.
Sırada: MediatR ile komutlar ve handler'lar.
Yapay zeka eğitmeniyle C# öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 93
- Dersler
- 346
Sıkça Sorulan Sorular
“CQRS Kavramları” dersi ücretsiz mi?
Evet — “CQRS Kavramları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.
“CQRS Kavramları” dersinde ne öğreneceğim?
Açıklık için komutları sorgulardan ayırın. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“CQRS Kavramları” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.