15

इनमें से प्रत्येक सॉफ़्टवेयर आर्किटेक्चर चमक या असफल क्या डोमेन करते हैं?कोड जेनरेटर बनाम ओआरएम बनाम संग्रहीत प्रक्रिया

कौन सी महत्वपूर्ण आवश्यकताएं आपको एक दूसरे को चुनने के लिए प्रेरित करती हैं?

कृपया मान लें कि आपके पास डेवलपर्स उपलब्ध हैं जो अच्छी वस्तु उन्मुख कोड के साथ-साथ अच्छे डेटाबेस विकास भी कर सकते हैं।

इसके अलावा, कृपया पवित्र युद्धों से बचें :) सभी तीन प्रौद्योगिकियों में पेशेवर और विपक्ष हैं, मुझे रुचि है कि इसका उपयोग करने के लिए सबसे उपयुक्त कहां है।

उत्तर

13

हर इन उपकरणों में से एक अमूर्त की परतों भिन्न, भिन्न अंक के साथ व्यवहार को ओवरराइड करने के लिए प्रदान करता है। ये वास्तुकला विकल्प हैं, और सभी वास्तु विकल्प, प्रौद्योगिकी, नियंत्रण, और संगठन के बीच व्यापार गत पर निर्भर आवेदन ही है और वातावरण जहां यह तैनात किया जाएगा के दोनों।

  • आप एक संस्कृति जहां DBAs के नियम का बसेरा ', फिर संग्रहीत-प्रक्रिया आधारित वास्तुकला तैनात करने के लिए आसान हो जाएगा के साथ काम कर रहे हैं। दूसरी ओर, प्रबंधन और संस्करण संग्रहीत प्रक्रियाओं को प्रबंधित करना बहुत मुश्किल हो सकता है।

  • कोड जनरेटर चमक जब आप स्थिर टाइप भाषाओं का उपयोग, क्योंकि आप संकलन समय के बजाय रन-टाइम में त्रुटियां पकड़ कर सकते हैं।

  • ओआरएम एकीकरण उपकरण के लिए आदर्श हैं, जहां आपको इंस्टॉलेशन-टू-इंस्टॉलेशन आधार पर विभिन्न आरडीबीएमएस और स्कीमा से निपटने की आवश्यकता हो सकती है। एक मानचित्र बदलें और आपका एप्लिकेशन SQL सर्वर पर माइक्रोसॉफ्ट डायनेमिक्स के साथ काम करने के लिए ओरेकल पर पीपल्स सॉफ्ट के साथ काम करने से चला जाता है।

मैं, अनुप्रयोगों के लिए जहां जेनरेट किए गए कोड संग्रहित प्रक्रियाओं के साथ इंटरफेस करने के लिए इस्तेमाल किया जाता है देखा है क्योंकि संग्रहित प्रक्रियाओं कोड जनरेटर में सीमाओं के आसपास पाने के लिए बदलाव किया जा सकता है।

आखिरकार एकमात्र सही उत्तर उस समस्या पर निर्भर करेगा जिसे आप हल करने की कोशिश कर रहे हैं और पर्यावरण जहां समाधान को निष्पादित करने की आवश्यकता है। कुछ और 'आलू' के सही उच्चारण का बहस कर रहा है।

+0

आपके उत्तर के लिए धन्यवाद! – Sklivvz

+0

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन ओआरएम के लिए एक सकारात्मक बिंदु यह है कि वे आमतौर पर बॉक्स से बाहर कैशिंग का प्रबंधन करते हैं, जो एक पिटा है यदि आप संग्रहित प्रक्रियाओं के साथ करना चाहते हैं क्योंकि यह मैन्युअल रूप से किया जाता है। – Augusto

5

मैं मानता हूं कि सब कुछ के लिए पेशेवर और विपक्ष हैं और आपके वास्तुकला पर बहुत कुछ निर्भर करता है। ऐसा कहा जा रहा है, मैं ओआरएम का उपयोग करने की कोशिश करता हूं जहां यह समझ में आता है। बहुत सारी कार्यक्षमता पहले से मौजूद है और आमतौर पर वे एसक्यूएल इंजेक्शन को रोकने में मदद करते हैं (साथ ही यह पहिया को फिर से आविष्कार करने में मदद करता है)।

अधिक जानकारी के लिए (गतिशील एसक्यूएल बनाम संग्रहित प्रक्रियाओं बनाम ORM) विषय पर इन अन्य दो पोस्ट देखने के

गतिशील एसक्यूएल संग्रहित प्रक्रियाओं
Which is better: Ad hoc queries, or stored procedures?

ORMs बनाम संग्रहीत बनाम प्रक्रियाएं
Why is parameterized SQL generated by NHibernate just as fast as a stored procedure?

+0

आपने मेरे सवालों का जवाब नहीं दिया ... – Sklivvz

3

ORMs और c ओडी जेनरेटर क्षेत्र के एक तरफ हैं, और संग्रहित प्रक्रियाएं दूसरे पर हैं। आम तौर पर, ग्रीनफील्ड परियोजनाओं में ओआरएम और कोड जनरेटर का उपयोग करना आसान है, क्योंकि आप अपने डेटाबेस स्कीमा को आपके द्वारा बनाए गए डोमेन मॉडल से मेल खाने के लिए तैयार कर सकते हैं। विरासत परियोजनाओं के साथ उनका उपयोग करना अधिक कठिन होता है, क्योंकि एक बार सॉफ्टवेयर "डेटा-प्रथम" मानसिकता के साथ लिखा जाता है, इसे डोमेन मॉडल के साथ लपेटना मुश्किल होता है।

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

कोई भी सही जवाब नहीं है, लेकिन मैं ओआरएम पक्ष की ओर अधिक प्रवृत्त हूं क्योंकि मेरा मानना ​​है कि यह किसी ऑब्जेक्ट-प्रथम मानसिकता के साथ सोचने के लिए और अधिक समझ में आता है।

2

संग्रहित प्रक्रियाओं

  • सकारात्मक: डेटा का उपयोग कोड समाहित और आवेदन-स्वतंत्र
  • विपक्ष है: आरडीबीएमएस विशिष्ट हो सकता है और विकास के समय में वृद्धि कर सकते हैं

ORM

कम से कम कुछ ORMs संग्रहित प्रक्रियाओं के मानचित्रण के लिए अनुमति देते

  • सकारात्मक: एब्सट्रैक्ट डेटा एक्सेस कोड और अनुमति देता है इकाई डोमेन-विशिष्ट तरीका
  • विपक्ष में लिखे जाने की वस्तुओं: संभावित प्रदर्शन भूमि के ऊपर और सीमित मैपिंग क्षमता

कोड जनरेशन

  • सकारात्मक: संग्रहीत-proc आधारित कोड या एक ORM या दोनों
  • विपक्ष का मिश्रण उत्पन्न करने के लिए इस्तेमाल किया जा सकता: समझ के अलावा कोड जनरेटर परत हो सकती है बनाए रखने के लिए कोड
  • उत्पन्न
10

मैं अपने दो सेंट जोड़ देंगे:

संग्रहित प्रक्रियाओं

  • आसानी से
  • सार मौलिक व्यापार के नियम अनुकूलित किया जा सकता है, डेटा अखंडता
  • बढ़ाने के लिए एक अच्छा सुरक्षा मॉडल प्रदान करें (सामने वाले डीबी उपयोगकर्ता को पढ़ने या लिखने की अनुमति देने की आवश्यकता नहीं है)
  • जब आपके पास कई आवेदक हैं तो चमकें एनएस एक ही डेटा तक पहुँचने

ORMs

  • आप केवल डोमेन पर ध्यान केंद्रित करने और विकास
  • शाइन के लिए एक अधिक "शुद्ध" वस्तु उन्मुख दृष्टिकोण है जब आपके आवेदन पार db होना चाहिए चलो संगत
  • शाइन जब आपके आवेदन ज्यादातर डेटा की बजाय व्यवहार से प्रेरित है

कोड जेनरेटर

  • , आप ORMs रूप में इसी तरह के लाभ प्रदान करें उच्च रखरखाव की लागत के साथ, लेकिन बेहतर customizability के साथ।
  • कि ORMs में ORMs के लिए आम तौर पर बेहतर कर रहे हैं, क्रम त्रुटियों के लिए संकलन समय त्रुटियों व्यापार करने के लिए जो है आम तौर पर परहेज किया जाता
2

आप एक महत्वपूर्ण विकल्प है कि अपने आप में एक वर्ग के हकदार भूल जाते हैं: एक संकर डेटा मानचित्रण ढांचे जैसे iBatis

मैं iBatis से प्रसन्न हूं क्योंकि यह आपके ओओ कोड को प्रकृति में ओओ बना देता है, और आपका डेटाबेस प्रकृति में संबंधपरक रहता है, और तीसरे अमूर्तता (वस्तुओं और संबंधों के बीच मैपिंग परत) जोड़कर प्रतिबाधा विसंगति को हल करता है। यह दूसरे में मैप करने के लिए ज़िम्मेदार है, बजाय दूसरे में एक प्रतिमान फिट करने की कोशिश करने के बजाय।

+2

अच्छा उपकरण, लेकिन मैं इसे मूल रूप से एक ओआरएम के रूप में वर्गीकृत करता हूं ... – Sklivvz

संबंधित मुद्दे