Saya masih ingat masa lalu yang baik dari repositori. Tetapi repositori digunakan untuk tumbuh jelek seiring waktu. Kemudian CQRS menjadi arus utama. Mereka baik, mereka menghirup udara segar. Tetapi baru-baru ini saya telah berulang kali bertanya pada diri sendiri mengapa saya tidak menjaga logika dengan benar dalam metode Action Controller's (terutama di Web Api di mana action adalah semacam command / query handler itu sendiri).
Sebelumnya saya punya jawaban yang jelas untuk itu: Saya melakukannya untuk pengujian karena sulit untuk menguji Controller dengan semua lajang yang tidak dapat diejek dan infrastruktur ASP.NET yang jelek secara keseluruhan. Tetapi waktu telah berubah dan kelas infrastruktur ASP.NET jauh lebih ramah unit test (terutama di ASP.NET Core).
Inilah panggilan WebApi yang khas: perintah ditambahkan dan klien SignalR diberitahu tentang hal itu:
public void AddClient(string clientName)
{
using (var dataContext = new DataContext())
{
var client = new Client() { Name = clientName };
dataContext.Clients.Add(client);
dataContext.SaveChanges();
GlobalHost.ConnectionManager.GetHubContext<ClientsHub>().ClientWasAdded(client);
}
}
Saya dapat dengan mudah menguji unit / mengejeknya. Terlebih lagi, berkat OWIN saya dapat mensetup server WebApi dan SignalR lokal dan membuat tes integrasi (dan cukup cepat).
Baru-baru ini saya merasa semakin kurang motivasi untuk membuat penangan Perintah / Pertanyaan rumit dan saya cenderung untuk menjaga kode dalam tindakan Web Api. Saya membuat pengecualian hanya jika logika diulang atau itu benar-benar rumit dan saya ingin mengisolasinya. Tetapi saya tidak yakin apakah saya melakukan hal yang benar di sini.
Apa pendekatan yang paling masuk akal untuk mengelola logika dalam aplikasi ASP.NET modern yang khas? Kapan masuk akal untuk memindahkan kode Anda ke Penangan Perintah dan Pertanyaan? Apakah ada pola yang lebih baik?
Memperbarui. Saya menemukan artikel ini tentang pendekatan DDD-lite. Jadi sepertinya pendekatan saya memindahkan bagian kode yang rumit ke command / queries handler bisa disebut CQRS-lite.