design patterns - डिजाइनिंग डीएएल और बीएलएल-संबंधित टेबल्स के लिए सिंगल/एकाधिक डेटा रिपॉजिटरी



design-patterns repository (1)

एक नया बहु-स्तरीय अनुप्रयोग तैयार करते समय, मुझे अपने डीएएल और बीएलएल परत डिजाइन के लिए एक निर्णय लेने में कठिनाई का सामना करना पड़ रहा है।

मान लीजिए कि मेरे पास 1-1 और 1-के दोनों मास्टर टेबल के साथ कई संबंध हैं, जिसमें कई तालिकाओं में कर्मचारी जानकारी फैल गई है कुछ नीचे सूचीबद्ध हैं:

कर्मचारी (मास्टर टेबल),
Employee_Contact_Detail,
Employee_Education,
Employee_Skill,
Employee_Experience

डीएएल स्तर पर, मेरे पास एक सामान्य डेटा रिपॉजिटरी है जो प्रत्येक सारणी के लिए GetAll, GetSingle, Add, Edit, Delete जैसी सामान्य कार्यक्षमता प्रदान करता है।

अब, क्या मुझे अपने "जेनेरिक डाटा रिपॉजिटरी" से प्राप्त "कर्मचारी डेटा रिपोजिटरी" को डिजाइन करना चाहिए और GetEmployeePersonalDetail, GetEmployeeContactDetail, GetEmployee शिक्षा, AddEmployeeEducation, AddEmployeePersonalDetail, EditEmployeePersonalDetail आदि जैसे एकल वर्ग में ऊपर सूचीबद्ध सभी संबंधित तालिकाओं के लिए कार्य जोड़ें। इस तरह मुझे लाभ होगा "जेनेरिक डेटा रिपॉजिटरी" के लिए बहुत कम लाभ दूसरी तरफ यह है कि मैं प्रत्येक तालिका के लिए एक अलग डेटा भंडार बनाने (और जेनेरिक रिपॉजिटरी से प्राप्त करता है) और उसके बाद "कर्मचारी" के लिए व्यावसायिक तर्क स्तर पर एक एकल वर्ग बनाना है।

संपादित करें

यदि मैं "प्रत्येक तालिका के लिए अलग-अलग डेटा संग्रह" विकल्प, डीएएल स्तर पर और फिर "कर्मचारी" के लिए "एकल व्यवसाय तर्क वर्ग" के बजाय, यदि मैं प्रत्येक डेटा संग्रह के अनुरूप अलग-अलग व्यावसायिक तर्क वर्ग बना रहा हूं, तो क्या होगा? परिदृश्य को ध्यान में रखते हुए अशिष्ट दृष्टिकोण?

आपके मार्गदर्शन के लिए बहुत बहुत धन्यवाद।


जैसा कि आपके प्रश्न पर टिप्पणी में बताया गया है, यह मेरी राय है

मुसीबत:

यदि आपके पास पहले से ही बेस रिपॉजिटरी है, तो प्रत्येक तालिका के लिए विशिष्ट रिपॉजिटरी क्यों बनाएं? फिर, बीएलएल में, आप प्रत्येक रिपॉजिटरी के लिए अलग Service क्लास ("बिजनेस लॉजिक क्लास" के रूप में उल्लेख किया है) बना रहे हैं। यह सभी एक दोहराने के काम और प्रबंधन और समझने में मुश्किल है।

सुझाव:

आपने उल्लेख नहीं किया है कि क्या ORM (यदि कोई है) आप उपयोग कर रहे हैं; इसलिए मुझे लगता है कि आपका ORM वास्तुकला के नीचे लागू करने के लिए आवश्यक सुविधाएं प्रदान करता है।
मेरा सुझाव है कि आप जेनेटिक रिपॉजिटरी में अपना डीएएल बंद करें। विशिष्ट तालिकाओं के लिए डीएएल कक्षाएं न लिखें। आपके सभी सर्विस क्लास बुनियादी CRUD फ़ंक्शन के लिए जेनेरिक डीएएल का उपयोग करेंगे। सभी विस्तारित कार्यक्षमता सेवा वर्ग में ही लागू की जानी चाहिए

प्रत्येक भंडार / तालिका के लिए एक वर्ग बनाने के बजाय सेवा वर्गों के बारे में दोबारा काम दोहराएं। एक सेवा में बेहतर समूह आपकी संबंधित कई तालिकाओं (रिपोजिटरी प्रश्न के ऊपर पैराग्राफ के संदर्भ में है)

उदाहरण के लिए, आप जेनेरिक डीएएल बनाते हैं जो सभी तालिकाओं के लिए बुनियादी कार्यक्षमता की सुविधा देता है। आप EmployeeService बनाते हैं जो आपके सभी कर्मचारी संबंधित तालिकाओं को कवर करती है। आप AccountService बनाते हैं जो आपके सभी लेखांकन संबंधित तालिका को कवर करता है। इसी तरह, सभी लॉगिंग संबंधित गतिविधियों के लिए LogService । यह सेवाओं के साथ बातचीत करना आसान बनाता है क्योंकि आप सभी संबंधित सदस्यों को एक कक्षा में प्राप्त करते हैं। यह दोहराने के काम भी कम करता है

मेरी इस और इस प्रश्न और उनके स्वीकृत उत्तर देखें

मुझे उम्मीद है कि यह आपकी चिंता का वर्णन करता है

1 संपादित करें

जैसा कि आपकी टिप्पणी में उल्लिखित है, आप हमें ईएफ यह जो मैंने सुझाव दिया है, को लागू करने के लिए आवश्यक सुविधाओं का समर्थन करता है।

डीएएल के बजाय बीएलएल में विस्तारित कार्यक्षमता को कार्यान्वित करने से टीयर की भूमिकाओं को ओवरलैप किया जाएगा

हाँ; ऐसा होता है। दूसरी तरफ एक ही है जब आप प्रत्येक तालिका के लिए डीएएल लिखते हैं, तो आप वास्तव में डीएएल में बिजनेस लॉक लीक कर रहे हैं। यदि व्यापारिक तर्क में कोई भी बदलाव है, तो आपको डीएएल को संशोधित करने की जरूरत है जो समझ में नहीं आता है।
मेरे सुझाव में, हालांकि परतें अतिव्यापी हैं, चिंताएं अभी भी अलग हैं डीएएल केवल सीआरयूडी को संभालता है बीएलएल डाटाबेस तर्क सहित सभी तर्कों को संभालता है।

क्या आपने अपनी किसी भी परियोजना में एक ही रणनीति का प्रयोग किया है?

हाँ। कुछ परियोजनाओं में पहले, मैं सामान्य डीएएल के बजाय प्रत्येक तालिका के लिए अलग डीएएल का निर्माण कर रहा था। इससे बड़े दोहराने का काम हुआ। हालांकि परियोजनाएं अपेक्षाकृत छोटा थी, रखरखाव ओवरहेड अधिक था। कुछ महीने पहले, मैंने अपेक्षाकृत बड़ी परियोजना के साथ शुरू किया था, जहां मैंने उपरोक्त सुझावों को लागू किया था। हम उस राहत को देख सकते हैं जो अब हमें दे दिया।





business-logic-layer