क्या यह डोमेन संचालित डिज़ाइन RESTful वेब सेवा के लिए एक अच्छा Visual Studio समाधान संरचना है?


15

मैं .NET 4.5 C # वेब एपीआई रेस्टफुल समाधान का निर्माण कर रहा हूं और मैं चाहूंगा कि कोई व्यक्ति मुझे बताए कि क्या मेरा प्रोजेक्ट समाधान सही है और डोमेन ड्रिवेन डिज़ाइन का उपयोग करके डिज़ाइन किए गए समाधान के लिए / या (?)।

समाधान को 6 परियोजनाओं में विभाजित किया गया है:

  • / आधार

(कुछ भी संदर्भित नहीं)

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

  • /Biz.Api

(आधार द्वारा संदर्भित)]

डोमेन सेवाएं प्रदान करता है और /Biz.Domain परियोजना में डोमेन व्यापार तर्क वस्तुओं तक पहुँच के लिए / बेस इंटरफ़ेस प्रोजेक्ट की अनुमति देता है।

  • /Biz.Domain

(Biz.Api द्वारा संदर्भित)

Biz.Api परत के लिए डोमेन कक्षाएं प्रदान करता है। ये स्मृति में व्यवसाय के डेटा में हेरफेर करने के तरीके प्रदान करते हैं।

  • /Dal.Db

(Biz.Api द्वारा संदर्भित)

डेटाबेस रिपॉजिटरी लेयर। डेटाबेस और मैप्स डेटा को आंतरिक डीटीओ में / इंटरफेसेस लेयर में परिभाषित करके लौटाता है।

  • /Dal.Services

(Biz.Api द्वारा संदर्भित)

वेब सेवाओं जैसी बाहरी निर्भरता के लिए एक प्रॉक्सी परत प्रदान करता है और उनके लौटाए गए डेटा को / Interfaces प्रोजेक्ट में परिभाषित आंतरिक DTO को मैप करता है।

  • / इंटरफेस

(उपरोक्त अधिकांश परियोजनाओं द्वारा संदर्भित)

समाधान के आसपास डेटा पास करने के लिए डीटीओ कक्षाएं और IoC जैसी चीजों के लिए अनुबंध को परिभाषित करने के लिए C # इंटरफेस शामिल हैं।


"-Biz.Api डोमेन सेवाएँ प्रदान करता है": क्या आपका मतलब अनुप्रयोग सेवाएँ है? इसके अलावा, रिपॉजिटरी आमतौर पर डीटीओ नहीं बल्कि एंटिटीज (एग्रीगेट रूट) को वापस लौटाते हैं। और इन परियोजनाओं के बीच निर्भरता भी जानना अच्छा होगा;)
गुरिल्ला

हां, मेरा मतलब है App Services। रिपॉजिटरी उन कक्षाओं के इंस्टेंस को लौटा रही है जो डेटा को स्टोर करने के अलावा कुछ नहीं करते हैं - इस डेटा को ऑटोमैप्पर के उपयोग से इस मामले में मैप किया जाता है। उदाहरण लौटे में कोई हेरफेर करने के तरीके नहीं हैं, जो मैं इकाइयां इकट्ठा करता हूं।
मैट डब्ल्यू

"यह डेटा मैप किया जाता है": क्या और क्या के बीच? "हेरफेर करने के तरीकों" से आपका क्या मतलब है?
गुरिल्ला

जवाबों:


22

यह फ़ोल्डर संरचना वॉन वर्नोन द्वारा प्रसिद्ध इंप्लीमेंटिंग डोमेन संचालित डिज़ाइन बुक से प्रेरित है

समाधान:
├ WebService (बाकी सेवाएं यहाँ रहते हैं)
├ WebServiceTests
├ आवेदन (अनुप्रयोग सेवाओं यहाँ रहते हैं)
├ ApplicationTests
├ डोमेन (संस्थाओं, VO, डोमेन सेवाओं, डोमेन कारखानों, विनिर्देशों, डोमेन घटनाओं, डेटा संग्रह स्थान इंटरफेस, अवसंरचना सेवाओं इंटरफेस)
├ DomainTests
├ इन्फ्रास्ट्रक्चर (रिपॉजिटरी, इन्फ्रास्ट्रक्चर सेवाएं निहित।, बाहरी सेवाओं के लिए एडेप्टर)
rastructure इन्फ्रास्ट्रक्चरटेस्ट

मैं एक सॉल्यूशन के साथ शुरू करता हूं फिर अपने आवेदन में प्रत्येक परत के लिए चार प्रोजेक्ट बनाता हूं फिर प्रत्येक लेयर टेस्ट के लिए एक और चार प्रोजेक्ट।

संबंधित खंडों को मॉड्यूल में कार्यक्षमता द्वारा वर्गीकृत किया जाना चाहिए इसके बजाय एक फ़ोल्डर interfacesया servicesअपने डोमेन परत में न बनाएं ।


1

जहाँ तक संरचना के रूप में, यह मेरे लिए ठीक लगता है, हालांकि मैं इस तरह के रूप अलग, और अधिक आत्म वर्णनात्मक नाम, के साथ आने के लिए होता है "YourProjectWebApi"के बजाय "Base", "Dal.External"के बजाय "Dal.Services"और इतने पर।

"आंतरिक डीटीओ" भाग में एक गंध हो सकता है, हालांकि, जब आप संस्थाओं को रिपॉजिटरी से बाहर निकालेंगे और सीधे उन पर डोमेन (व्यवसाय) कार्रवाई करने में सक्षम होंगे। संस्थाएं सिर्फ डीटीओ नहीं हैं।

मैं इस तथ्य से इकट्ठा होता हूं कि Dal.Db पर कोई निर्भरता नहीं है Biz.Domain,कि Interfaces प्रोजेक्ट से DTO के बीच डोमेन लेयर कुछ मैपिंग कर रहा है (रिपॉजिटरी द्वारा लौटाया गया है?) और इसकी स्वयं की डोमेन ऑब्जेक्ट्स। यह एक विशिष्ट अत्याधुनिक (== "प्याज" या "हेक्सागोनल") डीडीडी वास्तुकला में सही नहीं होगा - डोमेन परत को अन्य परियोजनाओं का संदर्भ नहीं देना चाहिए। उसी कारण से, रिपॉजिटरी इंटरफेस को डोमेन में घोषित किया जाना चाहिए, न कि Interfacesजैसा कि मुझे लगता है कि वे हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.