2008-10-07 12 views
5

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

मैं वास्तव में विभिन्न स्थितियों में डीएएल को संभालने के विभिन्न तरीकों और तकनीक के काम करने या अच्छी तरह से काम करने के तरीके के बारे में उनके विचारों को देखना पसंद नहीं करता।

उत्तर

2

दुर्भाग्यवश मुझे नहीं लगता कि एक "बेहतर तरीका" है, यह विशिष्ट स्थिति पर निर्भर है कि आप किस डीएएल दृष्टिकोण का उपयोग करते हैं। मार्टिन फाउलर द्वारा "कला की स्थिति" की एक महान चर्चा Patterns of Enterprise Application Architecture है।

अध्याय 10, डेटा स्रोत वास्तुकला पैटर्न विशेष रूप से व्यावसायिक अनुप्रयोगों के लिए सबसे अधिक उपयोग किए जाने वाले पैटर्न के बारे में बात करते हैं।

सामान्य रूप से, मुझे बुनियादी रखरखाव और अनुकूलता आवश्यकताओं को पूरा करने वाले सबसे सरल दृष्टिकोण का उपयोग करना सबसे अच्छा विकल्प है।

उदाहरण के लिए हाल ही में एक साधारण "पंक्ति डेटा गेटवे" की आवश्यकता थी। (यह सीआरयूडी संचालन करने के तरीकों सहित प्रत्येक प्रासंगिक डेटाबेस तालिका के लिए कोड उत्पन्न कक्षाएं थीं)। ओआरएम बनाम संग्रहित procs के बारे में कोई अंतहीन बहस नहीं, यह अभी काम किया, और आवश्यक नौकरी अच्छी तरह से किया।

+0

मैं मानता हूं कि विभिन्न स्थितियों के लिए उत्तर अलग होगा, लेकिन मैं बस कुछ अलग तकनीकों की तलाश में हूं और उन्होंने कैसे काम किया। –

1

कई सामान्य पैटर्न हैं। ,

  • तालिका डेटा गेटवे
  • पंक्ति डेटा गेटवे
  • सक्रिय रिकॉर्ड
  • डाटा मैपर

आप इस तरह के LLBLGen के रूप में एक ORM का उपयोग करते हैं: 'The patterns of enterprise architecture' पुस्तक इन के लिए एक अच्छा संदर्भ है आपको स्वयं-सेवा या एडाप्टर का विकल्प मिलता है।

4

मैंने कई वेब/WinForms अनुप्रयोगों के लिए अब Billy McCafferty's NHibernate Best Practices article/sample code पर भारी भरोसा किया है। यह एक अद्भुत लिखित आलेख है जो आपको एक अच्छा ठोस नमूना आर्किटेक्चर प्रदान करेगा - आपको मूलभूत एनएचबेर्नेट और टीडीडी को पढ़ाने के अलावा। वह आपको अपने वास्तुकला और डिजाइन निर्णयों का एक सिंहावलोकन देने की कोशिश करता है।

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

नोट, यह आलेख एनएचबेर्नेट पर भारी निर्भर करता है, लेकिन मुझे लगता है कि सामान्य दृष्टिकोण इसे अन्य ओआरएम के अनुरूप आसानी से बदला जा सकता है।

1

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

यहां suvius-flamingo link है।

1

[अद्यतन] इस अब मान्य नहीं है, इस परियोजना के डिजाइन बदल गया [/ अद्यतन]

हमारे ओपन सोर्स प्रोजेक्ट Bunian में, हम निष्कर्ष निकाला है कि व्यापार ऑब्जेक्ट (पूरे घटक) की मूल है सिस्टम, और उस डेटा एक्सेस परत सहित सबकुछ इसके चारों ओर घूमना चाहिए।

बिजनेस घटक दूसरों को जो कुछ चाहिए उसे निर्देशित करेगा, जिसका अर्थ यह है कि इसके माध्यम से। उदाहरण के लिए बिजनेस ऑब्जेक्ट व्यक्ति में एक इंटरफ़ेस सदस्य होगा जिसे आईरिपोजिटरीफोर्सन कहा जाएगा, इस सदस्य को आवश्यकता होने पर निर्भरता इंजेक्शन कंटेनर के माध्यम से एक उदाहरण आवंटित किया जाएगा।

अधिक जानकारी के लिए यहां मेरे ब्लॉग पोस्ट की जाँच करें:

http://www.emadashi.com/index.php/2008/11/data-access-within-business-objects-bunian-design//

और यहाँ Bunian के कोड की जाँच करें (हालांकि यह अभी तक शौकिया है):

http://www.codeplex.com/Bunian

बेशक वहाँ नए उभरते किया जाएगा डेटा पहुंच सत्र के जीवन चक्र की तरह इस दृष्टिकोण के साथ चीजें (यदि आप उदाहरण के लिए एनएचबीरनेट का उपयोग कर रहे हैं)। लेकिन यह है कि एक और सवाल के लिए होगा मैं लगता है :)

मैं आप इस उपयोगी

1

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

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

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

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