ฉันยังจำวันเก่า ๆ ของที่เก็บ แต่ที่เก็บเคยเติบโตน่าเกลียดกับเวลา จากนั้น CQRS จะเป็นกระแสหลัก พวกเขาใจดีพวกเขาสูดอากาศบริสุทธิ์ แต่เมื่อเร็ว ๆ นี้ฉันได้ถามตัวเองซ้ำแล้วซ้ำอีกว่าทำไมฉันถึงไม่รักษาตรรกะในวิธีการของตัวควบคุม (โดยเฉพาะใน Web Api ที่การกระทำเป็นตัวจัดการคำสั่ง / แบบสอบถามในตัวเอง)
ก่อนหน้านี้ฉันมีคำตอบที่ชัดเจนสำหรับเรื่องนี้: ฉันทำเพื่อทดสอบเนื่องจากเป็นการยากที่จะทดสอบ Controller ด้วยซิงเกิลที่ไม่สามารถทำการล็อคได้และโครงสร้างพื้นฐาน ASP.NET ที่น่าเกลียดโดยรวม แต่เวลามีการเปลี่ยนแปลงและคลาสโครงสร้างพื้นฐาน ASP.NET นั้นมีการทดสอบหน่วยที่เป็นมิตรมากขึ้นทุกวันนี้ (โดยเฉพาะใน ASP.NET Core)
ต่อไปนี้เป็นการเรียก WebApi ทั่วไป: มีการเพิ่มคำสั่งและลูกค้า SignalR จะได้รับแจ้งเกี่ยวกับมัน
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);
}
}
ฉันสามารถทดสอบหน่วย / จำลองได้อย่างง่ายดาย ยิ่งกว่านั้นต้องขอบคุณ OWIN ฉันสามารถตั้งค่าเซิร์ฟเวอร์ WebApi และ SignalR ในพื้นที่และทำการทดสอบการรวมระบบ (และทำได้ค่อนข้างรวดเร็ว)
เมื่อเร็ว ๆ นี้ฉันรู้สึกว่าแรงจูงใจน้อยลงและน้อยลงในการสร้างตัวจัดการคำสั่ง / แบบสอบถามที่ยุ่งยากและฉันมักจะเก็บโค้ดไว้ในการกระทำของ Web Api ฉันทำข้อยกเว้นเฉพาะเมื่อมีการทำซ้ำตรรกะหรือซับซ้อนจริงๆและฉันต้องการแยกมันออก แต่ฉันไม่แน่ใจว่าฉันทำสิ่งที่ถูกที่นี่
อะไรคือวิธีที่เหมาะสมที่สุดในการจัดการตรรกะในแอพพลิเคชั่น ASP.NET สมัยใหม่ทั่วไป? เมื่อใดที่สมควรย้ายรหัสของคุณไปยังตัวจัดการคำสั่งและแบบสอบถาม มีรูปแบบใดที่ดีกว่า
ปรับปรุง ฉันพบบทความนี้เกี่ยวกับวิธี DDD-lite ดังนั้นดูเหมือนว่าแนวทางของฉันในการย้ายส่วนที่ซับซ้อนของรหัสไปยังตัวจัดการคำสั่ง / แบบสอบถามอาจเรียกว่า CQRS-lite