क्या ORM समृद्ध डोमेन मॉडल बनाने में सक्षम हैं?


21

लगभग 8 वर्षों के लिए मेरी अधिकांश परियोजनाओं पर हाइबरनेट का उपयोग करने के बाद, मैं एक ऐसी कंपनी पर उतरा हूं जो इसके उपयोग को हतोत्साहित करती है और चाहती है कि आवेदन केवल संग्रहीत प्रक्रियाओं के माध्यम से डीबी के साथ बातचीत करें।

कुछ हफ़्ते के लिए ऐसा करने के बाद, मैं उस एप्लिकेशन का एक समृद्ध डोमेन मॉडल नहीं बना पा रहा हूं जिसे मैं बनाना शुरू कर रहा हूं, और एप्लिकेशन बस एक (भयानक) लेनदेन स्क्रिप्ट की तरह दिखता है।

मैंने पाया कुछ मुद्दों में से हैं:

  • संग्रहीत कार्यविधियों के रूप में ऑब्जेक्ट ग्राफ़ को नेविगेट नहीं किया जा सकता है, बस डेटा की न्यूनतम मात्रा को लोड करता है, जिसका अर्थ है कि कभी-कभी हमारे पास विभिन्न क्षेत्रों के साथ समान वस्तुएं हैं। एक उदाहरण है: हमारे पास एक ग्राहक से सभी डेटा प्राप्त करने के लिए एक संग्रहीत प्रक्रिया है, और दूसरा खाता जानकारी और ग्राहक से कुछ क्षेत्रों को पुनर्प्राप्त करने के लिए है।
  • हेल्पर वर्गों में बहुत सारे तर्क समाप्त हो जाते हैं, इसलिए कोड अधिक संरचित हो जाता है (पुरानी सी संरचनाओं के रूप में उपयोग की जाने वाली संस्थाओं के साथ)।
  • अधिक उबाऊ मचान कोड, क्योंकि कोई रूपरेखा नहीं है जो परिणाम को संग्रहीत प्रक्रिया से सेट करता है और इसे एक इकाई में रखता है।

मेरे प्रश्न हैं:

  • क्या कोई भी ऐसी ही स्थिति में है और स्टोर प्रक्रिया के दृष्टिकोण से सहमत नहीं है? तुमने क्या किया?
  • क्या संग्रहीत प्रक्रियाओं का उपयोग करने का वास्तविक लाभ है? "कोई भी एक ड्रॉप टेबल जारी नहीं कर सकता" के मूर्खतापूर्ण बिंदु के अलावा।
  • क्या संग्रहीत प्रक्रियाओं का उपयोग करके एक समृद्ध डोमेन बनाने का एक तरीका है? मुझे पता है कि ऑब्जेक्ट ग्राफ़ को नेविगेट करने में सक्षम होने के लिए संस्थाओं में डीएओ / रिपोजिटरीज़ को इंजेक्ट करने के लिए एओपी का उपयोग करने की संभावना है। मुझे यह विकल्प पसंद नहीं है क्योंकि यह वूडू के बहुत करीब है।

निष्कर्ष

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

अधिकांश अनुप्रयोग अनुरोध करते हैं और अन्य प्रणालियों को जानकारी भेजते हैं। ऐसा करने के लिए, हम मॉडल की शर्तों (जैसे एक व्यावसायिक घटना) में एक अमूर्त बनाते हैं और डोमेन मॉडल घटना को भेजता है या प्राप्त करता है। घटना को आमतौर पर मॉडल से जानकारी के एक छोटे सबसेट की जरूरत होती है, लेकिन पूरे मॉडल की नहीं। एक ऑनलाइन दुकान में उदाहरण के लिए, एक भुगतान गेटवे कुछ उपयोगकर्ता जानकारी और उपयोगकर्ता को चार्ज करने के लिए कुल का अनुरोध करता है, लेकिन खरीदारी के इतिहास, उपलब्ध उत्पादों और सभी ग्राहक आधार की आवश्यकता नहीं होती है। इसलिए घटना में डेटा का एक छोटा और विशिष्ट सेट है।

यदि हम किसी एप्लिकेशन के डेटाबेस को एक बाहरी सिस्टम के रूप में लेते हैं, तो हमें एक एब्स्ट्रैक्शन बनाने की आवश्यकता होती है जो हमें डेटाबेस मॉडल संस्थाओं को डेटाबेस में मैप करने की अनुमति देता है ( जैसा कि NimChimpsky ने उल्लेख किया है , डेटा-मैपर का उपयोग करके)। स्पष्ट अंतर यह है कि अब हमें प्रत्येक मॉडल इकाई के लिए डेटाबेस (या तो एक लीगेसी स्कीमा या संग्रहीत कार्यविधियाँ) के लिए मैपिंग की आवश्यकता है, अतिरिक्त दर्द के साथ, क्योंकि दोनों सिंक में नहीं हैं, एक डोमेन इकाई आंशिक रूप से मैप हो सकती है। एक डेटाबेस इकाई के लिए (जैसे एक UserCredentials वर्ग जिसमें केवल उपयोगकर्ता नाम और पासवर्ड होता है, जो एक अन्य तालिका में मौजूद उपयोगकर्ता तालिका में मैप किया जाता है), या एक डोमेन मॉडल इकाई एक से अधिक डेटाबेस इकाई के लिए मैप कर सकती है (उदाहरण के लिए यदि कोई एक है- मेज पर एक मानचित्रण, लेकिन हम सिर्फ एक कक्षा में सभी डेटा चाहते हैं)।

कुछ संस्थाओं के साथ एक आवेदन में, अतिरिक्त काम की मात्रा छोटी हो सकती है यदि संस्थाओं को अनुप्रस्थ करने की कोई आवश्यकता नहीं है, लेकिन यह तब बढ़ जाती है जब संस्थाओं को अनुप्रस्थ करने की एक सशर्त आवश्यकता होती है (और इस प्रकार हम किसी प्रकार के आलसी को लागू करना चाह सकते हैं) लोड हो रहा है')। जैसे-जैसे कोई एप्लिकेशन अधिक इकाइयाँ बढ़ाता है, यह काम बढ़ता जाता है (और मुझे लगता है कि यह गैर-रैखिक रूप से बढ़ता है)। यहाँ मेरी धारणा यह है कि हम एक ORM को पुनः प्राप्त करने का प्रयास नहीं करते हैं।

DB को एक बाहरी प्रणाली के रूप में मानने का एक फायदा यह है कि हम उन स्थितियों के आसपास कोड कर सकते हैं जिनमें हम एक एप्लिकेशन के 2 अलग-अलग संस्करण चाहते हैं, जिसमें प्रत्येक एप्लिकेशन का एक अलग मैपिंग होता है। उत्पादन के लिए निरंतर प्रसव के परिदृश्य में यह और अधिक दिलचस्प हो जाता है ... लेकिन मुझे लगता है कि यह कुछ हद तक ओआरएम के साथ भी संभव है।

मैं सुरक्षा पहलू को खारिज करने जा रहा हूं, इस आधार पर कि एक डेवलपर, भले ही उसके पास डेटाबेस तक पहुंच नहीं है, वह सबसे अधिक प्राप्त कर सकता है यदि सिस्टम में संग्रहीत सभी जानकारी नहीं है, बस दुर्भावनापूर्ण कोड इंजेक्ट करके (जैसे। मुझे विश्वास नहीं हो रहा है कि मैं ग्राहकों की क्रेडिट कार्ड के विवरण को लॉग करने वाली लाइन को हटाना भूल गया था, प्रिय प्रभु! )।


छोटा अद्यतन (6/6/2012)

संग्रहीत प्रक्रियाएं (कम से कम ओरेकल में) शून्य डाउनटाइम के साथ निरंतर वितरण जैसे कुछ भी करने से रोकती हैं, क्योंकि तालिकाओं की संरचना में कोई भी परिवर्तन प्रक्रियाओं और ट्रिगर को अमान्य कर देगा। तो उस समय के दौरान जब डीबी को अपडेट किया जा रहा है, एप्लिकेशन भी नीचे होगा। ओरेकल इस एडिशन-बेस्ड रिडिफाइनमेंट के लिए एक समाधान प्रदान करता है , लेकिन मैंने इस सुविधा के बारे में पूछे गए कुछ डीबीए में उल्लेख किया है कि इसे खराब रूप से प्रत्यारोपित किया गया था और वे इसे एक उत्पादन डीबी में नहीं डालेंगे।


ठीक है, जाहिर है कि आप ऐसा कर सकते हैं जो हाइबरनेट करता है और एक गतिशील प्रॉक्सी ऑब्जेक्ट बनाने के लिए विरासत का उपयोग करता है, जो आपको ऑब्जेक्ट ग्राफ को पुनः प्राप्त करने की अनुमति देता है। हालांकि सपा के साथ यह बहुत ही हैकिंग है: D
Max

इसलिए मैं हाइबरनेट के आधे पुनर्निवेश को समाप्त करूंगा, 10 साल के अनुभव के बिना हाइबरनेट टीम में :) है।
अगस्तो

1
किसी भी DBA को कुछ उपयोगकर्ताओं द्वारा विशेष तालिकाओं को छोड़ने से रोकना चाहिए। इससे कोई फर्क नहीं पड़ता कि आप इसे कैसे करने का प्रयास करते हैं।
जेफ ओ

1
आप Mybatis पर एक नज़र डाल सकते हैं - यह आपको आवश्यक सुविधा प्रदान कर सकता है। यह मानचित्रण ढांचे की तुलना में ORM से कम है। आप अपनी पसंद के अनुसार एसक्यूएल लिख सकते हैं और मायबेटिस को बता सकते हैं कि इसे अपने ऑब्जेक्ट मॉडल पर कहां रखा जाए। यह कई प्रश्नों के साथ बड़े ऑब्जेक्ट ग्राफ को संभालेगा, जो आपके पास स्थिति (बहुत पतली संग्रहित प्रक्रिया) की तरह लगता है।
माइकल के

1
@ ऑगस्टो: मैं एसपी के उपयोग के कारण नहीं, बल्कि एक समान स्थिति में रहा हूं, लेकिन एक मालिकाना मानचित्रण ढांचे के उपयोग के कारण जो वस्तु संबंधों का समर्थन नहीं करता था। हमने एक कोड लिखने में दिन बिताए जो एक उचित ORM का उपयोग करके मिनटों में लिखा जा सकता है। मुझे वह समस्या कभी हल नहीं हुई।
केविन क्लाइन

जवाबों:


16

आपके एप्लिकेशन को अभी भी डोमेन संचालित डिज़ाइन सिद्धांतों से मॉडल किया जाना चाहिए। चाहे आप एक ORM, सीधे JDBC का उपयोग कर रहे हों, SPs (या जो भी हो) को कॉल नहीं करना चाहिए । उम्मीद है कि सपा से अपने मॉडल को अमूर्त एक पतली परत इस मामले में चाल करना चाहिए। जैसा कि एक अन्य पोस्टर में कहा गया है , आपको एसपी और उनके परिणामों को एक सेवा के रूप में देखना चाहिए और परिणामों को अपने डोमेन मॉडल पर मैप करना चाहिए।


मार्टिज्न, मैं मानता हूं कि ऐप को डीडीडी सिद्धांतों का उपयोग करके मॉडल किया जाना चाहिए, लेकिन मैं जो समस्या का सामना कर रहा हूं (और कृपया मुझे बताएं कि इसका कोई समाधान है!) यह है कि कुछ संग्रहीत procs एक डीडीडी इकाई को तत्काल जानकारी देते हैं। कृपया इस टिप्पणी को देखें जहां मैंने जानकारी के बारे में थोड़ा और समझाया कि संग्रहीत प्रक्रियाएं वापस आती हैं। मैं इसे एक से अधिक स्टोर किए गए खरीद को लागू करके, और उदाहरण के लिए सभी उपयोगकर्ता विवरणों को पुनर्प्राप्त करके और फिर सभी खाता जानकारी प्राप्त करने के लिए किसी दूसरे को आमंत्रित कर सकता हूं, लेकिन यह गलत लगता है :)।
अगस्तो

1
@ ऑगस्टो वेल ... आप ऐप डेवलपर हैं, इसलिए आपको यह तय करना होगा कि क्या NULL के लिए निर्धारित कुछ फ़ील्ड्स के साथ कुछ विशेष वस्तु मौजूद है या नहीं। यदि यह समझ में आता है (उदाहरण के लिए कुछ कार्य के लिए) तो इसे होने दें। यदि नहीं, तो एसपी के लेखक को अधिक डेटा प्रदान करने के लिए कहें, ताकि आप अपनी वस्तुओं को बना सकें।
जेस्क प्रुसिया

और जेसेक की टिप्पणी को जोड़ते हुए - यह वास्तव में 2+ संग्रहीत प्रोक्स को कॉल करने के लिए पूरी तरह से स्वीकार्य है, फिर से उन्हें दो दूरस्थ सेवाओं के रूप में सोचें जिन्हें आपको अपने डोमेन मॉडल को बनाने के लिए कॉल करना है, उस के साथ कुछ भी गलत नहीं है :-)।
मार्टिज्न वर्बर्ग

@ मार्टिज़न: मेरे अनुभव में, एक पतली परत पर्याप्त नहीं है। मैपिंग कोड अंतर्निहित व्यापारिक तर्क की तुलना में काफी लंबा हो सकता है।
केविन क्लाइन

@ केविन क्लाइन - अच्छी बात है, उत्तर में 'उम्मीद' लगाई है :-)
मार्टिर्न वर्बर्ग

5

क्या संग्रहीत प्रक्रियाओं का उपयोग करने का वास्तविक लाभ है?

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


हाँ लाख बार हाँ! आपको यह भी सुनिश्चित करने की आवश्यकता है कि उपयोगकर्ता किसी भी तरह का काम नहीं कर सकते हैं जिन्हें वे नहीं करना चाहते हैं जिसमें तालिकाओं के लिए प्रत्यक्ष अधिकार नहीं है और संग्रहीत प्रॉपर मदद बहुत अधिक है।
HLGEM

1
मैं एक सार्वजनिक कंपनी के लिए काम करता हूं और हम SOX sompliant हैं। यह ऑडिटिंग का मेरा खराब ज्ञान हो सकता है, लेकिन मुझे डीबी स्तर (स्टोर किए गए प्रॉपर के माध्यम से) या एप्लिकेशन स्तर पर ऑडिट करने के बीच अंतर नहीं दिखता है। प्रत्येक एप्लिकेशन का अपना डीबी स्कीमा होना चाहिए और यह स्कीमा केवल एप्लिकेशन से ही सुलभ है, बजाय विभिन्न अनुप्रयोगों के बीच साझा किए जाने के।
अगस्तो

टूटी हुई कड़ी ...
एलेक्स आर

@ एलेक्स, निश्चित लिंक
तांगुरेना

2

संग्रहीत कार्यविधियाँ क्लाइंट साइड SQL कोड की तुलना में बहुत अधिक कुशल हैं। वे डीबी में एसक्यूएल को पूर्व-संकलित करते हैं जो इसे कुछ अनुकूलन करने की भी अनुमति देता है।

वास्तुकला में, एक एसपी किसी कार्य के लिए आवश्यक न्यूनतम डेटा लौटाएगा, जो अच्छा है क्योंकि इसका मतलब है कि कम डेटा स्थानांतरित किया जा रहा है। यदि आपको ऐसी वास्तुकला मिली है, तो आपको डीबी को एक सेवा के रूप में सोचने की ज़रूरत है (इसे वेब सेवा के रूप में सोचें और प्रत्येक एसपी को कॉल करने का एक तरीका है)। इसे इस तरह से काम करने के लिए समस्या नहीं होनी चाहिए, जबकि एक ORM आपको दूरस्थ डेटा के साथ काम करने में मार्गदर्शन करता है जैसे कि यह स्थानीय था, इस प्रकार यदि आप सावधान नहीं हैं तो प्रदर्शन के मुद्दों को प्रस्तुत करने में आपको धोखा दे रहा है।

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

एक और फायदा है - डीबीए आपके लिए अपने सभी एसक्यूएल प्रश्नों को लिखेंगे, और डीबी में सभी संबंधपरक पदानुक्रम को खुशी से संभाल लेंगे, इसलिए आपको नहीं करना है।


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

7
एसपीएस जरूरी हमेशा अधिक कुशल नहीं होते हैं और मुझे लगता है कि एसक्यूएल को डीबीए को सौंपना एक बुरा तरीका है। एक डोमेन विशेषज्ञ के रूप में डेवलपर को यह पता होना चाहिए कि वे कौन सा डेटा प्राप्त करना चाहते हैं और इसे कैसे प्राप्त करना चाहते हैं
Martijn Verburg

1
यह एक अच्छा जवाब है, लेकिन मेरे अनुभव में अधिकांश ग्राहकों को वास्तव में संग्रहीत प्रक्रियाओं के माध्यम से डेटा एक्सेस को नियंत्रित करने के लिए प्रदर्शन लाभ की आवश्यकता नहीं है। आवेदन पत्र पर आपके ओआरएम टूल्स का पूरा उपयोग करने में असुविधा होती है। अधिक बार मैं सॉफ्टवेयर की दुकानों में किए गए इन वास्तु निर्णयों को नहीं देखता, जहां उन्हें "ग्रे दाढ़ी" संग्रहीत कार्यविधि प्रोग्रामर की फूला हुआ वेतन को औचित्य देने की आवश्यकता होती है, जिसमें कोई अन्य कौशल नहीं है।
maple_shaft

1
the approach of letting the DBAs write the procedures smells like development silosसत्य के इस रत्न के लिए @Augusto +100 आपको नजरअंदाज करता है। मैंने इसे हमेशा उस स्थिति के रूप में देखा है जहां संग्रहीत प्रक्रियाओं के माध्यम से डेटा एक्सेस को नियंत्रित किया गया था।
maple_shaft

1
@maple_shaft: क्यों, डीबीए जो एसपी लिखते हैं, डेवलपर टीम का हिस्सा नहीं माना जाता है? जहां यह काम करता है, वे विशेषज्ञ कोडर हैं जो सिस्टम के इस पहलू को अच्छी तरह से जानते हैं, अधिकांश सामान्य प्रयोजन डेवलपर्स की तुलना में बहुत बेहतर है। यह समस्या है कि ORMs लोकप्रियता को जन्म दिया हो सकता है। मेरा मतलब है, कोई भी दो बार एक डिजाइनर होने के बारे में नहीं सोचता है कि जीयूआई करते हैं, तो स्कीमा करने वाले डेटा वास्तुकार के लिए नफरत क्यों?
gbjbaanb

2

अक्सर ऐसा होता है कि डेवलपर्स अपने ORM ऑब्जेक्ट को अपने डोमेन मॉडल के रूप में गलत तरीके से उपयोग करते हैं।

यह गलत है, और आपके डोमेन को सीधे आपके DB स्कीमा से जोड़ता है।

क्या वास्तव में आपके पास डोमेन मॉडल को उतना ही समृद्ध होना चाहिए जितना आप चाहें और ORM परत का अलग-अलग उपयोग कर सकें।

इसका मतलब है कि आपको वस्तुओं के प्रत्येक सेट के बीच मैपिंग की आवश्यकता होगी।


1
यह एक अच्छा विचार है लेकिन छोटी परियोजनाओं के लिए यह वास्तव में ओवरकिल की तरह लगने लगता है। इस दृष्टिकोण को ORM दृढ़ता परत और डोमेन मॉडल के बीच एक अनुवाद परत की भी आवश्यकता होती है।
maple_shaft

@maple_shaft ने सहमति व्यक्त की, और मुझे "मैपिंग" से मतलब था :-)
ozz

@ ठीक है, मैंने जिस तरह से काम किया है, वह ठीक यही है, इकाई वर्ग डोमेन मॉडल हैं (और मैं काफी सफलता के साथ जोड़ सकता हूं)। मैं सहमत हूं कि यह डोमेन मॉडल को स्कीमा से जोड़ता है, लेकिन यह वही है जो मैं चाहता हूं, जैसा कि मैं कॉन्फ़िगरेशन पर कन्वेंशन का उपयोग करता हूं, और अच्छा साइड इफेक्ट यह है कि अगर मैं किसी इकाई पर फ़ील्ड देखता हूं, तो मुझे कठिन सोचने की आवश्यकता नहीं है उस जानकारी को संग्रहीत करने के लिए तालिका और स्तंभ के नाम के बारे में।
अगस्तो

@Augusto मैंने भी किया है! और जैसा कि Maple_shaft कहता है, यह छोटे CRUD शैली एप्लिकेशन के लिए ठीक है, लेकिन कई मुद्दे हैं, जैसे कि ओपी पता लगा रहा है। एक उदाहरण यह हो सकता है कि आपके पास बहुत से मैपिंग टेबल के लिए कई उदाहरण हैं: स्टूडेंटक्लास, जो छात्रों को उनकी कक्षाओं में मैप करते हैं और सिर्फ स्टूडेंट और क्लासआईडी शामिल हैं, आप जरूरी नहीं कि इसे अपने डोमेन में मैप करना चाहते हों। यह मेरे सिर उदाहरण के शीर्ष पर बस एक त्वरित है।
ओज

2
@ चर्चा: आपकी टिप्पणी एक ORM के विचार के विपरीत है। एक ORM "आपके डोमेन को सीधे आपके DB स्कीमा से टाई नहीं करता है "। ORM एक अलग DAO परत की आवश्यकता के बिना, आपके डोमेन को DB स्कीमा में मैप करता है । यह एक ORM का पूरा बिंदु है। और अधिकांश ओआरएम कई-से-कई मैपिंग को ठीक से संभालते हैं, मैपिंग टेबल के लिए किसी भी डोमेन मॉडल की आवश्यकता नहीं होती है।
केविन क्लाइन

1

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


हम वर्तमान में डेटा मैपर्स का उपयोग कर रहे हैं, लेकिन समस्या यह है कि वे संग्रहीत डेटा को न्यूनतम सेट लौटाते हैं, जो कभी-कभी किसी ऑब्जेक्ट को भरने के लिए पर्याप्त नहीं होता है (शायद हमें संग्रहीत प्रक्रियाओं को अधिक जानकारी वापस करने की अनुमति देनी चाहिए)। उदाहरण के लिए, एक स्टोर की खरीद एक उपयोगकर्ता ईमेल, नाम, उपनाम को वापस कर सकती है; जबकि एक अन्य उपयोगकर्ता और एक पता जोड़ता है। चूंकि डेटा अलग है हम डेटा को स्टोर करने के लिए विभिन्न वस्तुओं का उपयोग कर रहे हैं, जिसका अर्थ है कि हमारे पास अलग-अलग 'उपयोगकर्ता' कक्षाएं हैं। मैं यहां विरासत के उपयोग से बचने की कोशिश कर रहा हूं, क्योंकि मुझे लगता है कि यह इसका गलत उपयोग है।
अगस्तो

@Augusto: इंटरफेस?
क्रामिनी ने मोनिका

@ कर्मी, मुझे नहीं लगता कि इंटरफेस यहाँ मदद करते हैं, क्योंकि तब हमें विभिन्न वर्गों में तर्क की नकल करने की आवश्यकता होगी। या हम इंटरफेस का उपयोग कर सकते हैं और फिर प्रोसेसिंग को एक सहायक वर्ग को सौंप सकते हैं, लेकिन यह वास्तव में OO नहीं है :(
अगस्तो

1
@Augusto मुझे समस्या समझ में नहीं आती है: "संग्रहीत procs डेटा का एक न्यूनतम सेट लौटाता है, जो कभी-कभी किसी ऑब्जेक्ट को भरने के लिए पर्याप्त नहीं होता है" तो आप स्प्रो को बदल देते हैं या एक और बनाते हैं, और फिर डेटा मैपर को मैपिंग करते हैं
निमचिम्प्स्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.