Konsep CQRS
Pisahkan perintah dari kueri agar lebih jelas.
Konsep CQRS adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.
Apa Itu CQRS?
CQRS adalah singkatan dari Pemisahan Tanggung Jawab Perintah dan Kueri. Gagasannya sederhana: pisahkan kode yang mengubah status dari kode yang membaca status.
// Commands : change state, return little or nothing
// Queries : return data, change nothingPerintah
Perintah menyatakan maksud untuk mengubah sistem - membuat order atau membatalkan langganan. Perintah diberi nama secara imperatif dan biasanya hanya mengembalikan ID atau tidak mengembalikan apa pun.
public record CreateOrderCommand(int CustomerId, string[] Items);
public record CancelOrderCommand(int OrderId);Kueri
Kueri meminta data tanpa efek samping. Kueri diberi nama berdasarkan data yang dikembalikannya dan membawa parameter penyaring yang diperlukan.
public record GetOrderByIdQuery(int OrderId);
public record ListOrdersQuery(int CustomerId, int Page);Mengapa Memisahkannya?
Pembacaan dan penulisan memiliki kebutuhan yang berbeda:
- Pembacaan harus cepat, didenormalisasi, dan ramah terhadap tembolok.
- Penulisan membutuhkan validasi, aturan bisnis, dan konsistensi.
Memisahkan keduanya memungkinkan setiap sisi berkembang dan diskalakan secara independen.
// Read side -> optimized projections / DTOs
// Write side -> domain rules / transactionsPola Handler
Setiap perintah atau kueri diproses oleh handler khusus. Satu pesan, satu handler, satu tanggung jawab - sehingga kelas tetap kecil dan terfokus.
// CreateOrderCommand -> CreateOrderHandler
// GetOrderByIdQuery -> GetOrderByIdHandlerPengendali yang Ringkas
Dengan CQRS, pengendali menjadi ringkas. Pengendali membangun pesan dan mengirimkannya; semua logika berada di dalam handler. Hal ini menghilangkan pengendali yang terlalu penuh dan meningkatkan kemudahan pengujian.
[HttpPost]
public async Task<IActionResult> Create(CreateOrderCommand cmd)
{
var id = await _sender.Send(cmd);
return CreatedAtAction(nameof(Get), new { id }, null);
}CQRS Bukan Penyimpanan Berbasis Peristiwa
Kekeliruan yang umum terjadi: CQRS hanya memisahkan pembacaan dan penulisan. Penyimpanan berbasis peristiwa (menyimpan status sebagai log peristiwa) adalah pola terpisah yang cocok dipadukan dengan CQRS, tetapi tidak diwajibkan.
// You can do CQRS with a plain single database.Satu atau Beberapa Penyimpanan Data
CQRS dasar menggunakan satu basis data untuk kedua sisi. Pengaturan tingkat lanjut menggunakan penyimpanan pembacaan dan penulisan yang terpisah serta menjaganya tetap sinkron, dengan menerima konsistensi eventual demi skala. Mulailah dengan sederhana.
// Level 1: one DB, separate handlers (most apps)
// Level 2: separate read/write models
// Level 3: separate read/write databasesManfaat
CQRS memberi Anda:
- Handler yang jelas dan memiliki satu tujuan.
- Pengujian yang lebih mudah - setiap handler diuji secara terisolasi.
- Tempat alami untuk perhatian lintas fungsi (validasi, pencatatan log).
- Pengenskalaan pembacaan dan penulisan secara independen.
// One class per use case = easy to find and testBiaya
CQRS menambahkan lebih banyak kelas dan lapisan perantara. Untuk aplikasi CRUD sederhana, pendekatan ini dapat menjadi berlebihan. Terapkan saat logika bisnis kaya atau domainnya kompleks.
// Trade-off: clarity & scale vs. boilerplateMemulai dengan MediatR
Pustaka MediatR menerapkan pola mediator dalam proses yang mengirimkan setiap pesan ke handler-nya, sehingga Anda tidak perlu menghubungkannya secara manual. Bagian selanjutnya dari kursus ini menggunakannya.
dotnet add package MediatRPemeriksaan Singkat
Pastikan Anda memahami perbedaan intinya.
Ringkasan
Anda telah mempelajari konsep CQRS:
- Pisahkan perintah (perubahan status) dari kueri (pembacaan).
- Setiap pesan memiliki satu handler yang terfokus, sehingga pengendali tetap ringkas.
- CQRS tidak bergantung pada penyimpanan berbasis peristiwa dan dapat menggunakan satu basis data.
- MediatR mengirimkan pesan ke handler.
Berikutnya: perintah dan handler dengan MediatR.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Konsep CQRS” gratis?
Ya — teks lengkap “Konsep CQRS” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Konsep CQRS”?
Pisahkan perintah dari kueri agar lebih jelas. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C# Academy?
Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Konsep CQRS” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?
Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.