डोमेन & सेवा परतों के पतले/मोटी के आधार पर आप डीडीडी के बारे में सही रास्ते पर हैं। डीडीडी का कहना है कि ज्ञान (यानी व्यवसाय तर्क) डोमेन मॉडल में crunched किया जाना चाहिए। डीएएल को डेटा एक्सेस चिंताओं को स्थानांतरित करना डीडीडी के अनुरूप है, लेकिन मुझे लगता है कि एक व्यापार परत में व्यापार तर्क को आगे बढ़ाना नहीं है। यदि आपके पास पतली डोमेन "डेटा मॉडल" परत (ज्यादातर इकाइयों के लिए) और मोटी सेवा परत (ज्यादातर "व्यापार तर्क" के लिए) है, तो आपके पास anemic domain हो सकता है।
इसके अलावा, डीडीडी में तकनीकी रूप से कोई "सेवा परत" नहीं है। एक "एप्लिकेशन लेयर" हो सकता है, लेकिन यह पतला होना चाहिए, और केवल आवेदन प्रवाह/प्रबंधन डोमेन क्लास जीवनकाल के लिए ज़िम्मेदार होना चाहिए। यह अनिवार्य रूप से नियंत्रक एनईटी एमवीसी में करते हैं, वेब http के संदर्भ में अनुप्रयोग प्रवाह का प्रबंधन करते हैं।
यदि मॉडल के भीतर सभी तर्कों को भरना आपके कोड को अत्यधिक जटिल बना देता है, तो मुझे "अत्यधिक जटिल" से आपका क्या मतलब है इसका उदाहरण सुनना होगा। आप एक जटिल डोमेन का सही ढंग से मॉडलिंग कर सकते हैं, या संभावना है कि आप चीजों को जटिल करने के लिए डीडीडी पैटर्न पर जा सकते हैं। मैं कहूंगा कि आपने इसे अपने प्रश्न में सूचीबद्ध किया है, आर्क डीडीडी नहीं है। मैं बस इसे "स्तरित वास्तुकला" कहूंगा, लेकिन ऐसा इसलिए है क्योंकि मैं भौतिक आर्क के बारे में बात करते समय केवल "टियर" शब्द का उपयोग करना पसंद करता हूं। हालांकि, आपका तार्किक वास्तुकला स्तरित है।
मुझे वास्तव में पसंद है कि डारिन अपने जवाब में प्याज आर्क से जुड़ा हुआ है। मैं इसका बड़ा प्रशंसक बन रहा हूं, और मुझे लगता है कि यह डीडीडी के लिए बिल्कुल विशिष्ट नहीं है।यदि आपका कोड रनटाइम कार्यान्वयन के साथ इंटरफ़ेस निर्भरताओं को हल करने के लिए निर्भरता इंजेक्शन का उपयोग करता है, तो आपके पास प्याज संग्रह का एक रूप हो सकता है। उदाहरण के लिए, क्या आप अपने डीएएल में किसी भी इंटरफेस को परिभाषित करते हैं? रनटाइम पर हल किए गए उन इंटरफेस के कार्यान्वयन क्या हैं?
यहां एक आर्क का एक उदाहरण है जिसे मैं अपनी नई परियोजनाओं में उपयोग करना शुरू कर रहा हूं।
API
परियोजना/विधानसभा: सामान्य इंटरफेस, enums, वर्ग, और विस्तार अन्य सभी परतों के द्वारा इस्तेमाल किया तरीकों यह प्याज + DDD का एक संयोजन है। डोमेन से अलग नहीं होना चाहिए, लेकिन हो सकता है।
Domain
परियोजना/असेंबली: सभी संस्थाएं और व्यावसायिक तर्क। केवल API
पर निर्भर करता है। कारखाने, सेवा, विनिर्देश, भंडार इत्यादि जैसे डीडीडी पैटर्न का उपयोग करता है। इसमें डोमेन-विशिष्ट इंटरफेस भी शामिल हैं जिन्हें API में परिभाषित नहीं किया गया है।
Impl
परियोजना/असेंबली: API
और Domain
में परिभाषित इंटरफेस के कार्यान्वयन। यह वह जगह है जहां ईएफ डीबीकॉन्टेक्स्ट लागू किया गया है, साथ ही साथ लॉगिंग, ईमेल भेजने आदि जैसी चीज़ें भी शामिल हैं। इन सभी कार्यान्वयन निर्भरता-इंजेक्शन हैं, इसलिए तकनीकी रूप से आपके पास कई आईएमएल परियोजनाएं/असेंबली हो सकती हैं।
UI
परियोजना/असेंबली: यह एमवीसी परियोजना है। नियंत्रक सीधे डोमेन की सतह का उपभोग करते हैं, और किसी एप्लिकेशन या सेवा परत से नहीं जाते हैं। कारखानों, सेवाओं, भंडारों आदि में किसी भी इंटरफेस निर्भरता, एमवीसी आईओसी (कन्स्ट्रक्टर इंजेक्शन) का उपयोग कर नियंत्रक द्वारा डोमेन में इंजेक्शन दी जाती है।
मैंने एपीआई परत को बहुत कोर पर रखा लेकिन आप एपीआई और डोमेन परियोजनाओं को एक में जोड़ सकते हैं। किसी भी तरह से, प्याज का बड़ा मांसपेशियों का हिस्सा डोमेन है, और इसमें आंतरिक परत है। उदाहरण के लिए सेवाएं कारखानों पर निर्भर हो सकती हैं, जो रेपॉजिटरीज़ पर निर्भर करती हैं, जो संस्थाओं पर निर्भर करती हैं।
आईएमएलएल प्रोजेक्ट वह है जिसे आप पालेर्मो के आरेख में "इंफ्रास्ट्रक्चर" प्याज की त्वचा के रूप में देखते हैं। यह यूआई के साथ बाहरी किनारे पर है, और इसमें कोई डोमेन-विशिष्ट ज्ञान नहीं है। यह जानता है कि ईमेल कैसे भेजना है, ईएफ का उपयोग करके डेटा स्टोर/पुनर्प्राप्त करना आदि। यदि आप चाहते हैं, तो इनमें से 1 से अधिक हो सकते हैं - उदाहरण के लिए 1 डेटा एक्सेस के लिए आईएमएल, मेल से निपटने के लिए 1 आईएमएल, आदि
एमवीसी में नियंत्रक और दृश्य हैं, और यूआई और वेब अनुप्रयोग प्रवाह पर ध्यान केंद्रित करते हैं। डोमेन-विशिष्ट ज्ञान की आवश्यकता वाले किसी भी डोमेन को डोमेन पर सौंप दिया जाता है, और डोमेन क्लास नियंत्रक में इंजेक्शन वाले कंस्ट्रक्टर होते हैं। इसका मतलब है कि डोमेन वर्गों में किसी भी कन्स्ट्रक्टर-इंजेक्शन इंटरफेस को आईओसी कंटेनर द्वारा स्वचालित रूप से हल किया जाता है।
अंतिम नोट के रूप में, एपीआई और डोमेन कक्षाओं में परिभाषित इंटरफेस के खिलाफ प्रोग्रामिंग का मतलब है कि आप एमवीसी प्रोजेक्ट से अलग से डोमेन प्रोजेक्ट का परीक्षण कर सकते हैं।
क्या आपके पास डीडीडी आधारित एएसपी.नेट एमवीसी परियोजनाओं का कोई अच्छा उदाहरण है? या जो वास्तुकला का वर्णन करते हैं उनका वर्णन करते हैं? मैं कई एएसपी.नेट एमवीसी परियोजनाओं से कोड को पढ़ने की कोशिश कर रहा हूं क्योंकि मैं यह समझने के लिए कर सकता हूं कि कौन सी प्रथाओं का उपयोग किया जा रहा है लेकिन यह बहुत मुश्किल है। –
मैं आपकी टिप्पणी का उत्तर पोस्ट करने से पहले इस बारे में आपसे बात करना चाहता हूं: http://chat.stackoverflow.com/rooms/9000/danludwig-private-room – danludwig
इतना दिलचस्प जवाब! मुझे नहीं पता कि Google ने मुझे इस पुरानी पोस्ट में कैसे निर्देशित किया है लेकिन यह वास्तव में अच्छा है। क्या आप एक उदाहरण के साथ डीडीडी और प्याज आर्किटेक्चर के संबंध में कोड प्रोजेक्ट में एक लेख लिख सकते हैं :) या आपने इसे पहले से ही किया है: डी – Celdor