2009-06-18 13 views
9

मेरे पास एक भंडार (CustomerRepository) है जो डेटा परत से डेटा पुनर्प्राप्त करता है। अधिकांश व्यावसायिक तर्क इकाई वर्ग (Customer) में है कि भंडार या तो स्वीकार करता है या लौटाता है।रिपोजिटरी पैटर्न और व्यापार तर्क

हालांकि, आप वैश्विक इकाई व्यापार तर्क कहां डालते हैं (जो सभी ग्राहकों पर लागू होता है)?

उदाहरण के लिए, मैं कुछ ग्राहकों को कुछ ग्राहकों को वापस नहीं करना चाहता हूं। मैं उस तर्क को भंडार में नहीं रखना चाहता हूं।

उत्तर

19

मैं रॉबर्ट मुन्टेनु से सहमत हूं।

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

आपके पास मूल रूप से एक ग्राहक सेवा वर्ग होगा जिसमें भंडार संदर्भ होगा। आपकी प्रस्तुति परत सेवा परत वर्ग का संदर्भ देगी।

एक अतिरिक्त भेद है जिसे आपके नाम से अनुमान के रूप में बनाया जा सकता है, जिसे आप .NET का उपयोग कर रहे हैं, और संभवतः LINQ से SQL का उपयोग करके अपने भंडार के रूप में NerdDinner में उल्लिखित है।

रिपोजिटरी आमतौर पर सेवा परत के लिए IQueryable लौटाता है, जिससे सर्विस लेयर चेन को अलग-अलग परिणाम सेट बनाने के लिए कई प्रश्न मिलते हैं। सेवा तब ToList या किसी अन्य विधि का उपयोग करके अभिव्यक्ति का मूल्यांकन करती है और प्रेजेंटेशन परत पर लौटाती है।

+1

रॉब कॉनरी द्वारा एमवीसी स्टोरफ्रंट ने मुझे रिपोजिटरी पैटर्न पर बदल दिया लेकिन दुर्भाग्य से उन्होंने वीडियो में उस निर्णय को स्पष्ट किए बिना सेवा परत को दोबारा प्रतिक्रिया दी है। तो मैं चिंतित था कि शायद यह सबसे अच्छा तरीका नहीं था। –

+11

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

+0

पर जाते हैं और सॉफ़्टवेयर का लक्ष्य पूरा करते हैं, तो सॉफ़्टवेयर को क्या करना चाहिए, इसे पूरा करें। – blu

5

इसे एक सेवा के पीछे लपेटें।

+4

इस मामले में इसका क्या अर्थ है? –

+0

मैं डोमेन मॉडल में अन्य सभी चीज़ों के लिए सेवाओं के बारे में सोचने के प्रकार की तरह हूं। – Min

+1

सहमत हैं। कुछ विधि के साथ ग्राहक सेवा बनाएं, जहां सभी ग्राहकों को अपडेट करें। – Gengzu

4

इसे किसी अन्य भंडार (BusinessRuleRepository) में रखें और ग्राहक रिपोजिटरी इसका उपयोग करें।

या

व्यापार तर्क केवल परिणाम एक उपयोगकर्ता देख सकते हैं आप एक कारखाने के साथ एक फसाड पैटर्न का उपयोग करना चाह सकते हैं सीमित रहा है। इस मामले में आपके पास एक आईसी कस्टमर रिपोजिटरी होगी जो आपके ग्राहक रिपोजिटरी और सीमित ग्राहक रीपोजिटरी (जो कस्टमर रिपोजिटरी को समाहित कर सकती है) को संभालने में सक्षम हो, और एक ग्राहक रिपोजिटरी फैक्ट्री जो उपयोगकर्ता के लिए उचित आईसी कस्टमर रिपोजिटरी लौटाती है।

0

मुझे लगता है कि इन प्रकार के कार्यों को एक सेवा परत में अलग करने का तरीका है।

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

जोड़ा गया बोनस यह था कि मेरे पास वेब एपीआई परत बनाकर बाहरी सिस्टम में सभी पूर्वानुमान तर्क का पर्दाफाश करने का एक आसान तरीका था।

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