2011-01-14 9 views
5

के बीच डीटीओ का उपयोग कैसे करें मैं बीएलएल और डीएएल के बीच बहुत सख्त सीमाओं के साथ एक छोटा ऐप लिखने की कोशिश कर रहा हूं और अब सोच रहा हूं कि डेटा (डोमेन ट्रांसफर ऑब्जेक्ट्स) को बीच में सबसे अच्छा तरीका क्या होगा परतेंयूआई, बीएलएल, डीएएल

मैं एक डोमेन स्तर (वर्ग पुस्तकालय) है कि दोनों BLL और दाल से पहुँचा जा सकता है में कुछ वर्गों को लागू किया। इन वर्गों में मूल रूप से गुण/डेटा सदस्य होते हैं और वर्तमान में डीएएल डेटा को प्रतिबिंबित करते हैं। उदाहरण के लिए:

class Customer : CustomerData 
{ 
    // Some methods 
} 

मेरी दाल में मैं Linq करने वाली Sql के माध्यम से डेटाबेस से ग्राहक रिकॉर्ड मिलता है:

class CustomerData 
{ 
    // some data fields 
} 

तो मैं कुछ वर्गों BLL में के रूप में लागू। मैं तब तक मेरी डोमेन वस्तु को LINQ वस्तु नक्शा:

CustomerData.field = LinqObject.field 
// Etc 

मेरे सोच है कि अब मैं जब अनुरोध BLL करने के लिए अपने DAL से एक CustomerData उदाहरण इस प्रकार है (और मैं अपने यूआई के लिए एक ग्राहक उदाहरण पारित करना चाहिए कि)।

मेरे बीएलएल में मुझे इस प्रकार एक ग्राहकडेटा उदाहरण प्राप्त होगा, लेकिन अब मैं इसे ग्राहक से बाहर करना चाहता हूं।

सवाल:

  1. मैं में मेरी BLL अब एक ग्राहक उदाहरण बना सकते हैं और फिर से सभी क्षेत्र के सदस्यों को कॉपी करने की है?
    ग्राहक सी = नया ग्राहक; सी .फील्ड = ग्राहकडाटा.फील्ड;
  2. मैं क्षेत्र प्रतिलिपि चरणों के बिना CustomerData से एक ग्राहक कैसे बना सकते हैं?
  3. क्या मुझे इसके बजाय रचना का उपयोग करना चाहिए?
    वर्ग ग्राहक { CustomerData डाटा; }
  4. वहाँ एक अधिक प्रभावी तरीका है (कम कोडिंग आदि) मेरे वर्तमान लेआउट में यह करने के लिए?
  5. वहाँ यह करने के लिए बेहतर तरीके है?
  6. सामान्य रूप से कोई टिप्पणी?

धन्यवाद!

+0

Yorah के जवाब # 1 के लिए +8। बंदर कोडिंग ऐसा ही आपको दर्द जैसा लग सकता है। अंत में यह वास्तव में गलत काम है क्योंकि डिग्री की वजह से यह बग बढ़ाता है और चीजों को $$ में दर्द देता है। ValuInjector भी आज़माएं - कई इसे ऑटोमैपर से बेहतर पसंद करते हैं, और अधिक हल्के वजन। अपने मैपिंग का पुन: उपयोग करने के लिए तैयार रहें। – FastAl

उत्तर

8

आम तौर पर मैं डीटीओ को गैर परत विशिष्ट, डीएल द्वारा निर्मित/उपभोग करने के लिए मानता हूं, बीएलएल द्वारा संसाधित और यूआई द्वारा खपत/निर्मित किया जाता है।

आमतौर पर प्रत्येक परत वीएस समाधान फ़ोल्डर में एक अलग परियोजना है, इसलिए डीटीओ इसलिए एक और परियोजना है जिसे प्रत्येक परत द्वारा संदर्भित किया जाता है।

इस तरह यदि कोई ऐसा क्षेत्र है जो यूआई में मौजूद होना है लेकिन अन्य परतों में नहीं है, तो डीटीओ को विरासत में प्राप्त किया जा सकता है।

0

आप पूरी तरह से डीटीओ का उपयोग नहीं कर रहे। अपने Customer कक्षा में, सीधे अपने यूआई पर CustomerData लौटें।

और से CustomerData

संपादित Customer वारिस की कोई जरूरत नहीं है: मैं पूरी तरह से यहाँ शब्द का इस्तेमाल किया क्योंकि CustomerData, डीटीओ है तो बजाय ग्राहक लौटने की, लौट CustomerData के रूप में यह अपने डीटीओ निम्नलिखित के रूप में देखा है आरेख।

एक सुझाव है, तो आप Repository Pattern का उपयोग अपने BLL और दाल को अलग करने चाहिए।

DTO 1]

+0

मैं डीटीओ के "पूरी तरह से उपयोग" कैसे करूं? – Oliver

+0

@ ओलिवर ने उत्तर अपडेट किया। – Adeel

+2

कोई मुझे डीटीओ को चित्रित करने और बीएलएल और डीएएल के बीच बातचीत के साथ एक लेख देता है, यह नहीं है कि एनीमिक डोमेन मॉडल एंटी-पैटर्न । यह मेरे लिए भ्रमित है – Costa

2

देखने की मेरी बात से कुछ नोट यहां आता है, मैं एक दैवज्ञ नहीं कर रहा हूँ, लेकिन उम्मीद है कि यह कुछ मदद :)

मेरे लिए

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

आमतौर पर, मैं केवल एक वैचारिक मॉडल व्यापार डोमेन को दर्शाती के साथ काम करते हैं। यह मॉडल, डेटा और व्यापार परत से और कुछ मामलों में प्रस्तुति परत (छोटे क्षुधा में) में दोनों का उपयोग किया के रूप में मृत Rabit बताते है। दृढ़ता के लिए मैं इस तरह के एफई 4.

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

व्यक्तिगत रूप से, मुझे लगता है कि एंटिटी फ्रेमवर्क 4 इस प्रोजेक्ट के अनुसार ऐप्स बनाने के दौरान आपको बहुत मदद करता है, अगर आप अपनी परियोजना के शुरुआती चरण में हैं और .NET 4 का उपयोग करते हैं तो आप इसे देखना चाहेंगे?

  1. हाँ, आप शायद की जरूरत है।
  2. उपयोग रचना
  3. हाँ, मैं उदाहरण के लिए रचना
  4. उपयोग का प्रयोग करेंगे इकाई की रूपरेखा 4
  5. (- "-)
  6. पर कई परतों होने पर आप जोर देते हैं, तो ऊपर
+0

निश्चित रूप से ईएफ 4 देखेंगे। मेरा प्रारंभिक फैसले यह भी था कि इस ऐप के लिए बहुत सी परतें हैं। लेकिन अतीत में मेरी परतें हमेशा "लीक" होती हैं, इसलिए मैं यहां अपने आप पर सख्त होने की कोशिश कर रहा हूं। – Oliver

1

देखना डीटीओ, आप AutoMapper का उपयोग कर सकते हैं ताकि आप कोड की एक पंक्ति (अपने डीटीओ में समान सम्मेलन का उपयोग करके) में एक से दूसरे में परिवर्तित हो सकें।

CustomerData customerData = Mapper.Map<LinqObject, CustomerData>(linqObjectInstance); 

तुम भी PresentationModel पैटर्न पर गौर करना चाहिए: http://martinfowler.com/eaaDev/PresentationModel.html

अगर आपको इस तरह से जाना चाहता हूँ MVVM (मॉडल-व्यू-ViewModel) के लिए गूगल कर सकते हैं।

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