2009-03-07 10 views
11

मैं एक ऐसे प्रश्न का स्पष्ट अंतिम उत्तर पाने की कोशिश कर रहा हूं जिसने मुझे लंबे समय तक पागल कर दिया है।क्या एक आम असेंबली में संस्थाओं के साझा संदर्भ के बजाय डीटीओ का उपयोग करने का कोई लाभ है?

यह आमतौर पर व्यक्त किया जाता है कि बीएलएल में बिजनेस लॉजिक और बिजनेस ऑब्जेक्ट्स (बीओ) होना चाहिए, और डीएएल का संदर्भ होना चाहिए। दूसरी तरफ डीएएल में बीएलएल का संदर्भ नहीं हो सकता है, इसलिए यह बीओ को तर्क के रूप में स्वीकार नहीं कर सकता है, या बीओ को रिटर्न वैल्यू के रूप में वापस नहीं कर सकता है।

इस समस्या का सबसे पारंपरिक जवाब है करने के लिए:

क) सरल मानकों, और बदले (अधिमानतः टाइप) डेटासेट और डेटा लौटाने के लिए DataTables स्वीकार करें: नाम स्थान दाल { सार्वजनिक वर्ग संपर्क सार्वजनिक DataTable GetContacts () {...} सार्वजनिक अद्यतन संपर्क (डेटाटेबल संपर्क) {...}

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

सी) एक सामान्य तीसरी असेंबली (जैसे Entities.dll कहा जाता है) का उपयोग करें, जो बीओ को परिभाषित करता है, और सभी 3 परतों द्वारा संदर्भित किया जाता है: यूआई, बीएलएल, और डीएएल।

विकल्प ए) कार्यान्वित करने के लिए कम से कम काम करता है (किसी अन्य असेंबली को बनाने की आवश्यकता नहीं है), इसलिए अक्सर प्रस्तावित क्यों किया जाता है, लेकिन डेटाटेबल्स में अतिरिक्त तारों की आवश्यकता होती है जिसे सरल संचालन के लिए जरूरी नहीं है।

अभी तक यह बहुत स्पष्ट नहीं है जो करने के लिए ख के) के रूप में या ग) बेहतर है ...

मैं देख रहा हूँ ख) कभी कभी की पेशकश की है, और लगभग कभी नहीं ग), हालांकि ग) दो का सबसे आसान प्रतीत हो रहा है ।

मुझे क्या याद आ रही है? सी क्यों है) इतनी कम पेशकश की जाती है भले ही यह तार्किक रूप से सबसे आसान प्रतीत होता है, और क्यों एक) यह पेशकश की जाती है जब यह सभी परिदृश्यों के लिए स्पष्ट रूप से उपयुक्त नहीं है (उदाहरण के लिए एकल वस्तुओं को वापस करना)?

धन्यवाद!

उत्तर

3

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

डीटीओ आमतौर पर बीएलएल से यूआई को डेटा पास करने के लिए उपयोग किया जाता है, हालांकि, esp। जब यूआई और बीएलएल अलग सर्वरों में तैनात किए जाते हैं। इस मामले में, यूआई को क्रॉस-प्रोसेस राउंडट्रिप्स को कम करने और परिवर्तन के प्रभाव को कम करने के लिए डोमेन मॉडल के सरलीकृत दृश्य की आवश्यकता होगी (जब डोमेन मॉडल बदलता है)।

1

मूल प्रश्न के लिए परिशिष्ट:

मैं (पहली प्रतिक्रिया के बाद लगता है कि निम्नलिखित संदर्भ पैटर्न Nguyenthat बू द्वारा, पूरी तरह से स्वीकार्य है, और शायद भी LINQ के साथ की सिफारिश की, आदि है:

BLL > 

v Business Entities Layer (BEL) 

DAL > 

BLL जब तक और डीएएल विभिन्न स्तरों पर हैं, और बीएलएल डब्ल्यूसीएफ के माध्यम से डीएएल को संचारित करता है ...? जो मामले में यह काम नहीं करेगा (व्यावसायिक संस्थाओं WCF के माध्यम से दाल द्वारा लौटाए गए श्रृंखलाबद्ध किया जाएगा, और और BLL पक्ष में खुद को है प्रॉक्सी मूल के ... और नहीं वापस मैप किया गया में deserialized कर दिया जाएगा। या कि साफ़ तौर पर गलत है, और ऊपर संदर्भ पैटर्न जब BLL और दाल ही स्तरीय है, साथ ही विभिन्न स्तरों में में हैं के लिए काम करेंगे

परिशिष्ट # 2:? के रूप में मिले एक दिलचस्प लिंक क्यों इसकी वास्तव में अच्छा बो के लिए एक बाहरी विधानसभा उपयोग करने के लिए। He states कि "यह नियम है कि परत केवल immediatly नीचे परत के बारे में पता होना चाहिए का उल्लंघन है, लेकिन डेटाबेस उसमें कॉलम के नाम तय यह दाल नीचे है BLL नीचे सीधे नहीं है। तो टाइप नहीं किया गया डेटासेट्स वाई ढाल नहीं है कहां डेटाबेस से और यही कारण है कि मुझे लगता है कि वे गलत हैं। एक अलग समाधान में परिभाषित दृढ़ता से टाइप की गई वस्तुओं का उपयोग करना एक बेहतर समाधान होगा। तो उदाहरण के लिए नाम संपत्ति के साथ डीटीओ में एक शिक्षक वर्ग होगा लेकिन ग्रेड विधि के बिना। "

1

मुझे आश्चर्य नहीं होगा अगर (सी) काफी आम था। और यदि आपका बीएलएल और यूआई एक पर है भिन्न सर्वर आप भी अगर आप WCF का उपयोग कर रहे तार पर संस्थाओं पारित कर सकते हैं। कैसे here [ज़िप] और यहाँ downloads page का लिंक है संस्थाओं की क्रमबद्धता करने के लिए इस उदाहरण पर एक नजर डालें। इस पोस्ट में भी serializing with WCF

साथ मदद कर सकता है
+0

HI जोनाथन: पहली कड़ी प्राधिकरण की आवश्यकता है दूसरी कड़ी है, जो एक आप की बात कर रहे थे के रूप में - इंटरफेस या डेटा सेवाओं उदाहरण –

+0

क्षमा करें, मैं जोड़ दिया है अनुमतियाँ अब तो आप के माध्यम से इसे डाउनलोड करने के लिए सक्षम होना चाहिए।? लिंक ए bove। इसे "डीडीडी और डब्ल्यूसीएफ - सीरियलाइजिंग एंटिटीज" कहा जाता है। –

+0

हाय जोनाथन: लिंक के लिए धन्यवाद। निष्कर्ष: क) डीटीओ के श्रृंखलाबद्ध किया जा सकता है/एक ही वस्तु को deserialized, अगर दोनों स्तरों में एक ही बो के लिए रेफरी है/BEntities विधानसभा: दाल <- बो # 1 वी (WCF का उपयोग) BLL <- बो # 2 यानी: बाहरी BO.dll सबसे अधिक समस्याओं को हल करता है। ख) क्यों टाइप किया कस्टम डीटीओ को डेटासेट पसंद करते हैं? –

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

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