मध्य-बड़े पैमाने पर MVC वेब एप्लिकेशन के लिए आर्किटेक्चर की योजना बनाते समय आप परतों को कैसे लागू कर सकते हैं जितना संभव हो उतना आसान और परीक्षण करना आसान है? (मूल रूप से सर्वोत्तम प्रथाओं का पालन करें) मान लें कि मैं अपने डेटा एक्सेस के रूप में पहले कोड का उपयोग कर रहा हूं।
मैं "व्यावसायिक तर्क" को परिभाषित करने के लिए संघर्ष करता हूं, और यह डेटा परत के साथ बातचीत करने के लिए कैसे है। उदाहरण के रूप में एक वाहन बिक्री आवेदन लेना, क्या व्यावसायिक तर्क वर्ग होंगे जो दिए गए वाहनों के लिए कर बैंड की गणना, मील प्रति गैलन आँकड़ों की तुलना आदि जैसे कार्य करते हैं? व्यावसायिक संस्थाओं (उदाहरण के लिए कार, वैन, मोटरसाइकिल) के लिए मैं अपनी DataContext
कक्षा के साथ डेटा लेयर में शामिल करूंगा ।
यह भी कि व्यवसाय के विपरीत आवेदन तर्क क्या होगा - मैं सत्र / उपयोगकर्ता इनपुट सत्यापन जैसी चीजों का अनुमान लगा रहा हूं?
इसलिए, उदाहरण के लिए, एक कार नियंत्रक एक एक्शन / व्यू रिजल्ट लौटा सकता है जो टाइप और बेस्ट mpg द्वारा फ़िल्टर की गई शीर्ष दस कारों को सूचीबद्ध करता है। तो ICarRepository
मान लें कि मेरे पास मेरे कंट्रोलर (रिपॉजिटरी पैटर्न / DI का उपयोग करके) में एक 'carRepo' है, मैं अपनी कारों को एक्शन विधि पैरामीटर से फ़िल्टर करता हूँ जैसेvar cars = carRepo.getCarsByType("hatchback");
इसलिए मैंने एक रिपॉजिटरी का उपयोग करके अपने कंट्रोलर से डेटा एक्सेस ज्ञान को रखा है, अब डोमेन लॉजिक का उपयोग करके कंट्रोलर के बिजनेस लॉजिक को बनाए रखने के लिए - var result = new MpgCalculator (Cars); - मान लें कि मुझे कैलकुलेटर वर्ग की आवश्यकता है क्योंकि यह DB से सर्वश्रेष्ठ लोडिंग / फ़िल्टरिंग संस्थाओं से अधिक, सर्वोत्तम ईंधन दक्षता की गणना करने के लिए अतिरिक्त तर्क करने की आवश्यकता है। इसलिए अब मेरे पास यह देखने के लिए एक डेटा सेट है कि रेंडर करने के लिए डेटा एक्सेस लेयर और डोमेन विशिष्ट ऑब्जेक्ट को प्राप्त करने के लिए एक रिपॉजिटरी का उपयोग करने के लिए उस डेटा पर व्यापार संबंधी कार्यों को संसाधित करने और निष्पादित करने के लिए मेरे पास एक डेटा सेट है।
क्या मैं यहाँ गलतियाँ कर रहा हूँ? क्या हमें अभी भी रिपॉजिटरी पैटर्न का उपयोग करने की आवश्यकता है या क्या मैं ओआरएम और परीक्षण को समाप्त करने के लिए इंटरफ़ेस के खिलाफ कोड कर सकता हूं? इस विषय पर, जैसा कि मेरे ठोस डेटा एक्सेस क्लैसे (एस) dbcontext डेटा लेयर में हैं, क्या इंटरफ़ेस की परिभाषाएँ डोमेन / व्यावसायिक परत में जानी चाहिए जिसका अर्थ है कि यदि डेटा एक्सेस तकनीक कभी बदली जाती है, तो मेरी अन्य परतें प्रभावित नहीं होती हैं?
इस तरह से मैंने जो भी अध्ययन किया है उससे मेरी संरचना इस तरह दिखती है:
MVC इंटरनेट अनुप्रयोग -> मानक इंटरनेट परियोजना - यहाँ मॉडल ViewModels हैं
डोमेन / व्यावसायिक परत -> व्यवसाय विशिष्ट वर्ग / मॉडल जो नियंत्रकों का उपयोग प्रासंगिक विचारों पर गुजरने से पहले डेटा परत से डोमेन संस्थाओं को संसाधित करने के लिए कर सकते हैं
रिपॉजिटरी अमूर्त आवश्यक है? -> मैं इस पर बहुत बहस सुनता हूं, खासकर जब ओआरएम का उपयोग कर रहा हो
डेटा परत -> इकाई वर्ग (कार, वैन, मोटरसाइकिल), DbContext - कंक्रीट डेटा एक्सेस प्रौद्योगिकी परत