मैं डेटाबेस एक्सेस लेयर डिज़ाइन कर रहा हूं जो हमें हमारे प्रोग्राम में एकाधिक डेटाबेस का समर्थन करने की अनुमति देता है। अंत में, हमारे कार्यक्रम के उपयोगकर्ता डेटाबेस सिस्टम की एक श्रृंखला से अंतर्निहित डेटाबेस सिस्टम चुनने में सक्षम होंगे। कुछ छोटे ग्राहक एमएस एक्सेस से खुश हो सकते हैं, अन्य माईएसक्ल, अन्य डीबी 2 पसंद करते हैं। वे डीबी सिस्टम वे हैं जिन्हें मैं अभी लक्षित करना चाहता हूं।डाटाबेस लेयर डिज़ाइन प्रश्न
उन आवश्यकताओं को देखते हुए, मैं एक अमूर्त वर्ग डेटाबेस कनेक्शन के साथ आया हूं। आंतरिक रूप से, मैं System.Data.Common.Data.DbConnection-class का उपयोग करता हूं, जो मुझे पहले से ही कुछ लचीलापन देता है।
जिन चीजों को ठोस उदाहरणों की आवश्यकता है (DbCommand उदा। के बजाय ओलेडबॉमैंड) को CreateDbCommand() जैसे अमूर्त तरीकों में छिपाया गया है। उप-वर्ग (AccessDbConnection की तरह) उनको लागू करते हैं और ठोस उदाहरण प्रदान करते हैं। वर्तमान में है कि (वर्ग नामों पठनीयता के लिए संक्षिप्त) इस पदानुक्रम की ओर जाता है:
DatabaseConnection / | \ AccessConn MySqlConn DB2Conn
हालांकि, वहाँ कुछ आपरेशनों कि अंतर्निहित डेटाबेस प्रणाली के लिए विशिष्ट हैं, ऐसे सभी तालिका नाम पुन: प्राप्त करने के रूप में कर रहे हैं। डाटाबेस कनेक्शन-क्लास में एक अमूर्त विधि GetTableNames() को रखना गलत लगता है और उप-वर्ग इसे ओवरराइट करते हैं।
मैंने सोचा कि शायद मैं डेटाबेस टूल नामक एक और सार आधार वर्ग बना सकता हूं, वहां उन परिचालनों को घोषित कर सकता हूं और फिर उन्हें डेटाबेस कनेक्शन कनेक्शन के उप-वर्गों के समान उप-वर्गों में लागू कर सकता हूं। जिसका मतलब है एक AccessDbConnection के लिए, मैं भी एक वर्ग AccessTools आदि आदि होगा कि:
DatabaseConnection DatabaseTools / | \ / | \ AccessConn MySqlConn DB2Conn AccessTools MySqlTools DB2Tools
किसी तरह मैं वास्तव में इस विचार से रोमांचित नहीं कर रहा हूँ।
इस डिजाइन समस्या को हल करने के लिए आपको क्या विचार हैं? अपने समय के लिए पहले से
धन्यवाद और जवाब :)
चीयर्स
ईसाई
क्या आप डिजाइन के बारे में चिंता:
को सटीकता से, सभी तालिका नाम पाने के लिए एक कार्य को करने, कॉल कैसे दिखेंगे? यह मेरे लिए उचित लगता है (पहली नज़र में)। मैं यह सुनिश्चित करने का कोई तरीका शामिल करना चाहता हूं कि आप 'MySQLConn' के साथ 'AccessTools' का उपयोग नहीं कर सके, लेकिन यह एकमात्र चीज है जिसे मैं सोच सकता हूं। – ChrisF
मुझे लगता है कि अमूर्त विधि दृष्टिकोण ठीक है। ओकम के रेज़र और केआईएसएस सिद्धांत का उल्लंघन करने और कक्षाओं का दूसरा सेट बनाने के लिए आप क्या कारण बता सकते हैं जहां कोई पर्याप्त होगा? मैंने आधे दर्जन परियोजनाओं में वर्णित पहली वास्तुकला का उपयोग किया है और इसके साथ कभी भी कोई समस्या नहीं है। बहुत सारे डीबी-विशिष्ट कोड की आवश्यकता नहीं है, बशर्ते आप मानक एसक्यूएल से चिपके रहें। –
@ChrisF: जब मैं क्लास डेटाबेस कनेक्शन के बारे में सोचता हूं, तो मैं केवल इसे कनेक्शन के रूप में सोचता हूं, जो मुझे कनेक्शन बनाने, खोलने और बंद करने में सक्षम बनाता है। सभी टेबल नामों और अन्य डीबी सिस्टम विशिष्ट परिचालनों को क्वेरी करने के लिए कनेक्शन के साथ कुछ करना है (आखिरकार, वे इस पर काम करते हैं), लेकिन मुझे लगता है कि उन्हें कनेक्शन के साथ बहुत सख्त नहीं होना चाहिए। – Christian