विभिन्न कारणों से, हम एक नई व्यावसायिक वस्तुएं/डेटा संग्रहण पुस्तकालय लिख रहे हैं। इस परत की आवश्यकताओं में से एक व्यापार नियमों के तर्क, और वास्तविक डेटा भंडारण परत को अलग करना है।एक व्यावसायिक वस्तुओं/डेटाबेस पहुंच परत के लिए आर्किटेक्चर
एकाधिक डेटा स्टोरेज परतें हो सकती हैं जो एक ही ऑब्जेक्ट तक पहुंच लागू करती हैं - उदाहरण के लिए, एक मुख्य "डेटाबेस" डेटा स्टोरेज स्रोत जो अधिकांश ऑब्जेक्ट्स लागू करता है, और दूसरा "ldap" स्रोत जो उपयोगकर्ता ऑब्जेक्ट को लागू करता है। इस परिदृश्य में, उपयोगकर्ता वैकल्पिक रूप से एक एलडीएपी स्रोत से आ सकता है, शायद थोड़ा अलग कार्यक्षमता के साथ (उदाहरण के लिए, उपयोगकर्ता ऑब्जेक्ट को सहेजना/अपडेट करना संभव नहीं है), लेकिन अन्यथा इसका उपयोग उसी तरह से किया जाता है। एक और डेटा स्टोरेज प्रकार एक वेब सेवा, या एक बाहरी डेटाबेस हो सकता है।
हम इसे लागू करने के लिए दो मुख्य तरीके हैं, और मैं और सहकर्मी एक मौलिक स्तर पर असहमत हैं जो सही है। मुझे कुछ सलाह चाहिए कि किस पर उपयोग करने के लिए सबसे अच्छा है। मैं जितना संभव हो सके तटस्थ के रूप में अपने विवरणों को रखने की कोशिश करूंगा, क्योंकि मैं यहां कुछ उद्देश्य दृश्य बिंदु ढूंढ रहा हूं।
व्यावसायिक वस्तुएं मूल कक्षाएं हैं, और डेटा स्टोरेज ऑब्जेक्ट्स व्यवसाय वस्तुओं का उत्तराधिकारी हैं। क्लाइंट कोड डेटा स्टोरेज ऑब्जेक्ट्स से संबंधित है।
इस मामले में, सामान्य डेटा नियम प्रत्येक डेटा संग्रहण ऑब्जेक्ट द्वारा विरासत में प्राप्त होते हैं, और यह डेटा संग्रहण ऑब्जेक्ट्स है जो सीधे क्लाइंट कोड द्वारा उपयोग किया जाता है।
यह निहितार्थ है कि क्लाइंट कोड निर्धारित करता है कि किसी दिए गए ऑब्जेक्ट के लिए कौन सी डेटा संग्रहण विधि का उपयोग करना है, क्योंकि इसे उस प्रकार के ऑब्जेक्ट को स्पष्ट रूप से एक उदाहरण घोषित करना है। क्लाइंट कोड को उपयोग किए जा रहे प्रत्येक डेटा संग्रहण प्रकार के लिए कनेक्शन जानकारी स्पष्ट रूप से जानना आवश्यक है।
यदि कोई डेटा संग्रहण परत किसी दिए गए ऑब्जेक्ट के लिए अलग-अलग कार्यक्षमता लागू करती है, तो क्लाइंट कोड संकलित समय पर इसके बारे में स्पष्ट रूप से जानता है क्योंकि ऑब्जेक्ट अलग दिखता है। यदि डेटा संग्रहण विधि बदल दी गई है, तो क्लाइंट कोड को अद्यतन करना होगा।
व्यवसाय वस्तुएं डेटा भंडारण वस्तुओं को समाहित करती हैं।
इस मामले में, व्यावसायिक वस्तुओं का सीधे क्लाइंट एप्लिकेशन द्वारा उपयोग किया जाता है। क्लाइंट एप्लिकेशन बेस लेयर जानकारी के साथ बिजनेस लेयर में गुजरता है। किसी दिए गए ऑब्जेक्ट का उपयोग करने वाले डेटा संग्रहण विधि के बारे में निर्णय व्यावसायिक ऑब्जेक्ट कोड द्वारा किया जाता है। कनेक्शन जानकारी कॉन्फ़िगरेशन फ़ाइल से लिया गया डेटा का एक हिस्सा होगा (क्लाइंट ऐप वास्तव में इसके विवरण के बारे में नहीं जानता/देखभाल नहीं करता है), जो किसी डेटाबेस के लिए एक कनेक्शन स्ट्रिंग हो सकता है, या विभिन्न डेटा संग्रहण प्रकारों के लिए कई टुकड़े कनेक्शन स्ट्रिंग हो सकता है। अतिरिक्त डेटा संग्रहण कनेक्शन प्रकारों को किसी अन्य स्थान से भी पढ़ा जा सकता है - उदाहरण के लिए, डेटाबेस में कॉन्फ़िगरेशन तालिका जो विभिन्न वेब सेवाओं के लिए URL निर्दिष्ट करती है।
यहां लाभ यह है कि यदि किसी मौजूदा ऑब्जेक्ट में कोई नई डेटा संग्रहण विधि जोड़ दी जाती है, तो कौन सी विधि का उपयोग करने के लिए यह निर्धारित करने के लिए रनटाइम पर कॉन्फ़िगरेशन सेटिंग सेट की जा सकती है, और यह क्लाइंट अनुप्रयोगों के लिए पूरी तरह से पारदर्शी है। किसी दिए गए ऑब्जेक्ट के लिए डेटा स्टोरेज विधि बदलते समय क्लाइंट ऐप्स को संशोधित करने की आवश्यकता नहीं होती है।
व्यावसायिक वस्तुएं बेस क्लास हैं, डेटा स्रोत ऑब्जेक्ट्स व्यावसायिक वस्तुओं से प्राप्त होते हैं। मुख्य रूप से आधार वर्गों के साथ ग्राहक कोड सौदों।
यह पहली विधि के समान है, लेकिन क्लाइंट कोड बेस बिजनेस ऑब्जेक्ट प्रकारों के चर, और लोड()/बनाएँ()/आदि व्यावसायिक वस्तुओं पर स्थैतिक विधियों की घोषणा करता है, उचित डेटा स्रोत-टाइप की गई वस्तुओं को वापस कर देता है।
इस समाधान का आर्किटेक्चर पहली विधि के समान है, लेकिन मुख्य अंतर यह है कि किसी दिए गए व्यावसायिक ऑब्जेक्ट के लिए किस डेटा संग्रहण ऑब्जेक्ट का उपयोग करना है, वह व्यवसाय परत द्वारा क्लाइंट कोड नहीं है।
मैं वहाँ पहले से ही विद्यमान रहे हैं ORM पुस्तकालयों कि यह कार्यक्षमता के कुछ प्रदान करते हैं, लेकिन अब उन छूट कृपया पता है (वहाँ संभावना है कि एक डेटा भंडारण परत इन ORM पुस्तकालयों में से एक के साथ लागू किया जाता है) - यह भी ध्यान रखें मैं जानबूझकर आपको यह नहीं बता रहा हूं कि यहां कौन सी भाषा का उपयोग किया जा रहा है, इसके अलावा यह दृढ़ता से टाइप किया गया है।
मैं यहां कुछ सामान्य सलाह ढूंढ रहा हूं कि किस विधि का उपयोग करना बेहतर है (या कुछ और सुझाव देने के लिए स्वतंत्र महसूस करें), और क्यों।