मुझे अभी भी रिपॉजिटरी के अच्छे पुराने दिन याद हैं। लेकिन रिपॉजिटरी समय के साथ बदसूरत हो जाते थे। तब CQRS को मुख्यधारा मिली। वे अच्छे थे, वे ताजी हवा की सांस थे। लेकिन हाल ही में मैं खुद से बार-बार पूछ रहा हूं कि क्यों न मैं तर्क को एक कंट्रोलर के एक्शन मेथड (विशेषकर वेब एपि में जहां एक्शन अपने आप में किसी प्रकार का कमांड / क्वेरी हैंडलर हो) को सही नहीं रखता।
पहले मेरे पास इसके लिए एक स्पष्ट जवाब था: मैं इसे परीक्षण के लिए करता हूं क्योंकि उन सभी अचूक एकल और समग्र बदसूरत ASP.NET बुनियादी ढांचे के साथ नियंत्रक का परीक्षण करना कठिन है। लेकिन समय बदल गया है और ASP.NET अवसंरचना वर्ग आजकल (विशेषकर ASP.NET Core में) अधिक यूनिट परीक्षण अनुकूल हैं।
यहाँ एक विशिष्ट WebApi कॉल है: कमांड जोड़ा गया है और सिग्नलआर क्लाइंट को इसके बारे में सूचित किया गया है:
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);
}
}
मैं आसानी से यूनिट टेस्ट / मॉक कर सकता हूं। अधिक, ओविन के लिए धन्यवाद, मैं स्थानीय वेबएपीआई और सिग्नलआर सर्वर को सेटअप कर सकता हूं और एक एकीकरण परीक्षण कर सकता हूं (और वैसे भी बहुत तेजी से)।
हाल ही में मैंने बोझिल कमांड / क्वेरी हैंडलर बनाने के लिए कम और कम प्रेरणा महसूस की और मैं वेब एपि क्रियाओं में कोड रखने के लिए हूं। मैं केवल एक अपवाद बनाता हूं यदि तर्क दोहराया जाता है या यह वास्तव में जटिल है और मैं इसे अलग करना चाहता हूं। लेकिन मुझे यकीन नहीं है कि मैं यहां सही काम कर रहा हूं।
एक सामान्य आधुनिक ASP.NET अनुप्रयोग में तर्क के प्रबंधन के लिए सबसे उचित तरीका क्या है? अपने कोड को कमांड और क्वेरी हैंडलर में स्थानांतरित करना कब उचित है? क्या कोई बेहतर पैटर्न हैं?
अपडेट करें। मुझे डीडीडी-लाइट दृष्टिकोण के बारे में यह लेख मिला । इसलिए ऐसा लगता है कि कोड के जटिल भागों को कमांड / क्वेश्चन हैंडलर्स तक ले जाने के मेरे दृष्टिकोण को CQRS- लाइट कहा जा सकता है।