2010-04-24 14 views
6

के बीच इंटरफ़ेस मैं स्क्रैच से एक छोटे से एप्लिकेशन पर काम कर रहा हूं और इसे स्वयं आर्किटेक्चर और डिज़ाइन अवधारणाओं को सिखाने की कोशिश करने के लिए उपयोग कर रहा हूं। यह एक .NET 3.5, WPF अनुप्रयोग है, और मैं अपने डेटा स्टोर के रूप में एसक्यूएल कॉम्पैक्ट संस्करण का उपयोग कर रहा हूं।.नेट, सी # इंटरफ़ेस बिजनेस लॉजिक और डीएएल

मैं व्यवसाय तर्क परत पर काम कर रहा हूं, और अभी अभी डीएएल लिखना शुरू कर दिया है। मैं केवल परिणाम प्राप्त करने के लिए सरल प्रश्नों और SqlCeResultSet पर भेजने के लिए SqlCeComamnds का उपयोग कर रहा हूं। मैं अपने सम्मिलन और अद्यतन विधियों को डिजाइन करना शुरू कर रहा हूं, और यहां समस्या है - मुझे बीएलएल से डीएएल में आवश्यक डेटा प्राप्त करने का सबसे अच्छा तरीका नहीं पता है। क्या मैं एक सामान्य संग्रह में पास करता हूं? क्या मेरे पास डेटाबेस के लिए सभी डेटा के साथ एक विशाल पैरामीटर सूची है? क्या मैं बस वास्तविक व्यापार वस्तु में गुजरता हूं (इस प्रकार बीएलएल में कंक्रीट सामान में अपना डीएएल लगा रहा हूं?)।

मैंने इंटरफेस का उपयोग करने के बारे में सोचा - बस डीएएल में आईबी बिजनेस ओब्जेक्टा पास कर रहा है, जो सादगी प्रदान करता है जो मुझे बिना किसी कार्यान्वयन के कसकर मुझे मजबूर कर रहा है। आप लोग क्या सोचते हैं?

उत्तर

2

यदि मैं आपकी स्थिति में था, तो शायद मैं अपने डेटा एक्सेस लेयर को परिभाषित करने के लिए LINQ से SQL का उपयोग करता हूं - यह आपको SqlCeFooBar सामान को बनाए रखने के लिए बहुत सारे काम को बचाएगा और आपको बनाए रखने के लिए एक डिज़ाइनर (प्रकार) देगा एसक्यूएल सीई का उपयोग करते हुए आपके डेटाबेस में अन्यथा कमी होगी।

तो इस मामले में, मैं शायद एल 2 एस परत द्वारा उजागर की गई संस्थाओं के लिए व्यापार तर्क स्तर को कसकर जोड़ दूंगा। औचित्य यह है कि संस्थाएं व्यावसायिक वस्तुओं हैं, हालांकि किसी भी सेवा से रहित।

शायद मैं इकाइयों को यूआई के रूप में पदानुक्रम तक पहुंचने नहीं दूँगा। उस स्तर पर, विशेष रूप से दृश्य के लिए मॉडल का उपयोग करने के लिए यह और अधिक समझ में आता है - विशेष रूप से यह देखते हुए कि आप WPF का उपयोग कर रहे हैं।

बेशक, यह सब आपके आवेदन के आकार और जटिलता पर निर्भर करता है। मुझे लगता है कि यह एक काफी छोटा पैमाने पर आवेदन (एकल उपयोगकर्ता?) है कि आप एसक्यूएल सीई का उपयोग कर रहे हैं।

+1

यह निश्चित रूप से एक छोटा, एकल-उपयोगकर्ता ऐप है, लेकिन कारण यह है कि मैं इसे कर रहा हूं, विभिन्न डिजाइन अवधारणाओं पर कुछ अभ्यास करना है, इसलिए मैं यह सुनिश्चित करना चाहता हूं कि मैं इसे कैसे कर रहा हूं जितना संभव हो सके "सही" (सबसे मजबूत) डिजाइन के करीब है। पॉइंटर्स के लिए धन्यवाद। – Joel

3

मुझे लगता है कि व्यापार ऑब्जेक्ट को डेटा एक्सेस लेयर में पास करना ठीक है। मुझे लगता है कि बीएलएल का काम सिर्फ अपनी वस्तुओं के साथ काम करना है, यह जांचने के लिए कि क्या सभी नियमों का पालन किया जा रहा है, किसके बारे में, बचाया जा सकता है, किसके लिए, किस क्षेत्र, समय, आदि पर

एक बार ऐसा करने के बाद इसे डीएएल को पास करें, और मुझे लगता है कि यह पता लगाने के लिए आईटी का काम है कि इसे किसी चीज में कैसे परिवर्तित किया जा सकता है, लेकिन यह जांच नहीं करेगा कि क्या जारी रखा जा रहा है या पढ़ा जा रहा है या किसके द्वारा, यह सिर्फ यह करेगा। यह सीधे लावर्ड हो सकता है, एक ला लिनक, लेकिन यदि आपके तर्क मॉडल आपके डेटा मॉडल 1: 1 से मेल नहीं खाते हैं, तो डीएएल को सभी रूपांतरण करना चाहिए।

बीएलएल में सामान के लिए अपना डीएएल बांधने के बारे में, मुझे लगता है कि आपको अपने बीएलएल को अपने डीएएल में बांधने के बारे में चिंता करना चाहिए। मैं आपके डीएएल (आईआरपीपॉजिटरी के रूप में) का प्रतिनिधित्व करने के लिए एक इंटरफ़ेस का उपयोग करूंगा, इस तरह आप अपने बीएलएल को किसी भी प्रकार की निरंतरता तंत्र को केवल उस प्रकार के आईरिपोजिटरी को बदलकर कर सकते हैं जिसका उपयोग आप कर रहे हैं (यदि आप आईओसी: पी का उपयोग करते हैं तो अतिरिक्त अंक)। आईआरपीोजिटरी को लागू करने वाले ठोस वर्ग व्यावसायिक वस्तुओं से बंधे होंगे, लेकिन उन्हें यह जानना होगा कि वे क्या बचत कर रहे हैं? जबकि बीएलएल को यह नहीं पता है कि बचत क्या कर रही है।

+0

मुझे लगता है कि आप एक ही चीज़ के बारे में बात कर रहे हैं, लेकिन दूसरी दिशा से इसमें आ रहा है - मैंने हमेशा यह माना है कि बीएलएल कच्चे डेटा को व्यावसायिक वस्तुओं में परिवर्तित करता है, जबकि आप सुझाव देते हैं कि डीएएल व्यावसायिक वस्तुओं को कच्चे डेटा में परिवर्तित करता है । पोस्ट के लिए धन्यवाद। इससे मुझे समस्या के बारे में सोचना पड़ा (डेटा <-> ऑब्जेक्ट्स) एक और समग्र तरीके से, भले ही मैं इस मार्ग पर नहीं जा रहा हूं। – Joel

+0

मदद करने में प्रसन्नता :) –

5

मुझे नहीं लगता कि आपके प्रश्नों का एक सरल जवाब है क्योंकि परिस्थितियों के आधार पर कई विकल्प हैं। मुझे आपकी समस्याओं को बेहतर ढंग से समझने में मदद करने के लिए नीचे दी गई दो पुस्तकों को पढ़ने में मदद मिली है।

  • एमएस नेट: architecting Enterprise (एस्पोसिटो, Saltarello)
  • एमएस आवेदन वास्तुकला गाइड, 2 संस्करण के लिए आवेदन।

दूसरी पुस्तक ऑनलाइन उपलब्ध है। here देखें।

3

डीएएल में व्यावसायिक वस्तु को पारित करने के लिए सरल और सबसे तेज़ तरीका है। यह छोटी परियोजनाओं में काम करता है, लेकिन समान नुकसान हैं:

1) व्यापार वस्तुएं बीएलएल परत का हिस्सा हैं, और यदि आप बीएलएल में ऑब्जेक्ट पास करते हैं तो डीएएल बीएलएल पर निर्भर हो जाता है। कम परत ऊपरी के बारे में जानता है - यह परतों के विचार को बिल्कुल विपरीत करता है।

2) व्यापार वस्तु सीधे बीडी में इसे सहेजने के लिए बहुत जटिल है। इस मामले में नई "मैपर" इंटरमीडिएट परत पेश करना बेहतर है।

इन सभी मुद्दों को दूर करने के लिए मैं व्यापारिक वस्तुओं से स्वतंत्र रूप से डीएएल को इंटरफ़ेस बना देता हूं। मैं इसके बजाए "पंक्ति" कक्षाओं का उपयोग करता हूं - डेटाबेस या एक्सएमएल में एक रिकॉर्ड का प्रतिनिधित्व। .NET 3 में।इस उद्देश्य के लिए 5 linqtosql autogenerated कक्षाओं का उपयोग किया जा सकता है।

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