2013-01-24 9 views
5

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

मैं एक आम दाल, जो तब किसी भी बैकएंड में एक आम फ़ंक्शन निष्पादित करना चाहते हैं। बैकएंड में डालने, अद्यतन करने आदि के लिए अद्वितीय कोड होता है। इसलिए 1 बैकएंड में एक कर्मचारी को जोड़ने से दूसरे में अलग-अलग कोड होंगे।

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

बना सकते हैं, लेकिन फिर बैकएंड वस्तु "SaveEmployee", "SavePlan" जैसे कार्यों के सौ है, अभी मैं निम्नलिखित है:

DAL 
    --> DAL.Backend1 
     --> Employee.Save(employee) 
     --> Plan.Save(plan) 
    --> DAL.Backend2 
     --> Employee.Save(employee) 
     --> Plan.Save(plan) 

दाल परियोजना में मेरे पास प्रत्येक ऑब्जेक्ट, कर्मचारी, योजना के लिए एक फैक्टरी पैटर्न है, यह तय करने के लिए कि कौन सी डीएएल का ऑब्जेक्ट वापस लौटना और निष्पादित करना है।

मैं बहुत यकीन है कि यह इसके लिए सबसे अच्छा वास्तुकला नहीं है कर रहा हूँ, इसलिए मेरी समस्या को हल करने का उपयोग करने के लिए एक बेहतर पैटर्न है कि अगर मैं सोच रहा हूँ।

+0

कम पूरी तरह से गतिशील जा रहा है और गतिशील CRUD बयान के निर्माण, आप ठोस कार्यक्षमता कहीं करने के लिए जा रहे हैं। यदि आप इसे डेटाबेस में नहीं चाहते हैं, तो मुझे लगता है कि जिस मार्ग पर आप गए हैं वह सबसे अच्छा मार्ग है। –

+0

मैं आमतौर पर समग्र पैटर्न में जाता हूं। – Malk

+1

"विभिन्न डेटाबेस डिज़ाइन" को परिभाषित करें। आपका मतलब है - एक एसक्यूएल, एक एक्सएमएल, एक नोएसक्ल है? या हम विभिन्न संबंधपरक डेटाबेस के बारे में बात करते हैं? – TomTom

उत्तर

0

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

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