अनुप्रयोग सेवा परत कॉलिंग डेटाबेस फ़ंक्शन। खराब वास्तुदोष?


11

परिदृश्य:

  • स्टैक: जावा, स्प्रिंग, हाइबरनेट।
  • मॉडल: क्लाइंट-सर्वर एप्लीकेशन।
  • पैटर्न: मॉडल-व्यू-कंट्रोलर (MVC)।

सेवा परत वर्गों में तीन व्यवहार होते हैं:

  1. कुछ सेवाओं में विधियों के भीतर व्यावसायिक नियम होते हैं और आवेदन के लिए दृढ़ता का प्रतिनिधित्व करते हैं। पसंद:

    EntityManager.save (इकाई);

  2. कुछ सेवाएं बस एक डेटाबेस फ़ंक्शन (पासिंग पैरामीटर) को कॉल करती हैं जैसे:

    CallableStatement cls = con.prepareCall ("{call databaseFunction (args)}"));

  3. कुछ सेवाओं में दोनों व्यवहारों के तरीके हैं।

मेरे सवाल:

  1. क्या एप्लिकेशन सेवाओं को कॉल करने में कोई समस्या है - सीधे - डेटाबेस फ़ंक्शन? क्या यह बुरा व्यवहार नहीं माना जाता है? इस तरह की परियोजना के लिए एक आर्किटेक्चर मॉडल क्या होगा?
  2. क्या एक ही सेवा में व्यवहार मिश्रण होने में कोई समस्या है? लेनदेन और स्थिरता के रूप में?
  3. रखरखाव के मामले में, यह एनकैप्सुलेशन डेवलपर को अस्पष्ट बना देता है कि उसे डेटाबेस में कार्यों को भी बदलना चाहिए? इससे कैसे बचा जाए?
  4. क्या यह परिदृश्य दुनिया भर के अन्य अनुप्रयोगों में होता है या यह सिर्फ एक वास्तुशिल्प त्रुटि थी?

यह प्रश्न समान है, लेकिन बिल्कुल समान नहीं है .. सॉफ्टवेयरइंजीनियरिंग.स्टैकएक्सचेंज
जॉन रेन्नोर

जवाबों:


7

क्या एप्लिकेशन सेवाओं को कॉल करने में कोई समस्या है - सीधे - डेटाबेस फ़ंक्शन? क्या यह बुरा व्यवहार नहीं माना जाता है?

मुझे लगता है कि वहाँ है। आप अनुप्रयोग सेवा के लिए डेटाबेस इंटर्न के बारे में एक ज्ञान दे रहे हैं। किसी भी तरह से डेटाबेस बदलना (स्टोरेज इंजन को बदलना या किसी क्षेत्र का नाम बदलना या इंडेक्स बनाना) आपको एप्लिकेशन सेवा को बदलने और एसआरपी का उल्लंघन करने की आवश्यकता हो सकती है ।

इस तरह की परियोजना के लिए एक आर्किटेक्चर मॉडल क्या होगा?

नीचे टिप्पणी देखें।

क्या एक ही सेवा में व्यवहार मिश्रण होने में कोई समस्या है? लेनदेन और स्थिरता के रूप में?

मैं नहीं मानता कि कोई तकनीकी समस्या है, लेकिन एक तार्किक है। आप इसे बदलने के लिए कठिन, कम संरचित, कठिन बनाने वाले आवेदन में दो दृष्टिकोणों को मिलाते हैं। SRP का उल्लंघन करने के बारे में उपरोक्त टिप्पणियां भी देखें।

रखरखाव के मामले में, यह एनकैप्सुलेशन डेवलपर को अस्पष्ट बना देता है कि उसे डेटाबेस में कार्यों को भी बदलना चाहिए?

ज़रूर करता है।

इससे कैसे बचा जाए?

स्थान के तरीके और फ़ंक्शंस, जो डेटाबेस के साथ सीधे एब्सट्रैक्शन के एक अलग स्तर पर काम करते हैं (जैसा कि यह एक डीएओ परत या एक साधारण रिपॉजिटरी पैटर्न है - आपके आवेदन की जटिलता पर निर्भर करता है)

क्या यह परिदृश्य दुनिया भर के अन्य अनुप्रयोगों में होता है या यह सिर्फ एक वास्तुशिल्प त्रुटि थी?

मुझे लगता है कि हमारी दुनिया में सब कुछ होता है;)


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

अच्छा और संक्षिप्त जवाब। एसआरपी पहली चीज थी जो मेरे दिमाग में आई थी जब मैंने पहली बार कोड को देखा था। कुछ सहकर्मियों का कहना है कि विधि एसआरपी का उल्लंघन इस तथ्य के कारण नहीं करती है कि यह केवल डेटाबेस फ़ंक्शन को कॉल करता है। लेकिन उन कार्यों में से कुछ चयन, आवेषण और अद्यतन करते हैं। तो यह SRP का उल्लंघन करता है या नहीं? (शायद यह अपने आप में अलग से चर्चा करने का एक और सवाल है?)
linuxunil

1
+1 उस लाइन के लिए जो मुझे लगता है कि हमारी दुनिया में सब कुछ होता है;)
linuxunil

वास्तुकला के सभी स्तरों पर @linuxunil SRP का सम्मान किया जाना चाहिए। मेरे मामले में मेरा मतलब सेवा के स्तर पर SRP था, न कि विधि के स्तर पर। @ जिमीजैम्स येप। अधिकांश ओआरएम संग्रहीत प्रक्रियाओं के साथ अच्छी तरह से काम नहीं करते हैं। लेकिन कभी-कभी संग्रहीत प्रोसीज़ आवश्यक हैं।
व्लादिस्लाव रैस्ट्रुसनी

3

आपने जो कहा उसके अनुसार सेवा की परत है इसलिए जो स्थापत्य पैटर्न फिट है वह स्तरित वास्तुकला है। आगे का संदर्भ

हाँ, यह आमतौर पर डेटा एक्सेस लेयर की तुलना में डायरेक्ट डेटाबेस कॉल करने के लिए एक बुरा अभ्यास होता है, इस तरह से बिजनेस लेयर केवल डेटाबेस के एक एब्स्ट्रैक्शन तक पहुंचता है।

मिक्स व्यवहार के रूप में, डीएओ पैटर्न या रिपॉजिटरी पैटर्न के रूप में कुछ डिज़ाइन पैटर्न का उपयोग करने से उस कोड को सुधारने में जिम्मेदारियों को सौंपने में मदद मिल सकती है।

डिज़ाइन पैटर्न और ORM का उपयोग करने के कुछ फ़ायदे आपके कोड की पठनीयता का उत्तरदायित्व है, इसलिए यदि आपके डेटाबेस की पहुँच में परिवर्तन होता है तो आपकी व्यावसायिक परत को अधिक नहीं बदलना चाहिए।


यकीन नहीं होता कि यह क्यों डाउन-वोट किया गया था। यह उत्तर अलग-अलग चिंताओं से निपटने वाले कोड को अलग करने की सिफारिश करता है । यहां प्रोग्रामिंग के एक प्रमुख की तरह लगता है ... यकीन नहीं होता कि यह क्या है ... यार। अगर केवल मैं नाम के बारे में सोच सकता था। +1 बीटीडब्ल्यू
ग्रेग बरगार्ड

क्या यह ठोस सिद्धांतों में से एक नहीं है?
जे। पिचार्दो '

3
सं। एसआईडी में "एस" एस इंगले रिस्पॉन्सिबिलिटी प्रिंसिपल (एसआरपी) है। लेकिन चिंता का पृथक्करण, जिसे आप सुझा रहे हैं, डेटा लॉजिक लॉजिक से सेवा तर्क को अलग करने का एक वैध कारण है। व्लादिस्लाव के अन्य जवाब में सिंगल रिस्पॉन्सिबिलिटी प्रिंसिपल का उल्लेख है। सच कहूँ तो, SRP और सेपरेशन ऑफ कंसर्न शराब और पनीर की तरह एक साथ चलते हैं।
ग्रेग बरगार्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.