मैं (पुनः) बड़े पैमाने पर डिज़ाइन तैयार कर रहा हूं, हम DDD के आधार पर मल्टी-लेयर आर्किटेक्चर का उपयोग करते हैं।
हमारे पास डेटा लेयर (रिपॉजिटरी के कार्यान्वयन), डोमेन लेयर (डोमेन मॉडल की परिभाषा और इंटरफेस - रिपॉजिटरी, सर्विसेज, कार्य की इकाई), सर्विस लेयर (सेवाओं के कार्यान्वयन) के साथ MVC है। अब तक, हम सभी परतों के पार डोमेन मॉडल (ज्यादातर इकाइयाँ) का उपयोग करते हैं, और हम डीटीओ का उपयोग केवल दृश्य मॉडल (नियंत्रक, सेवा रिटर्न डोमेन मॉडल) के रूप में करते हैं और नियंत्रक व्यू मॉडल बनाता है, जिसे दृश्य में पास किया जाता है)।
मैं प्रयोग कर रहा हूँ, उपयोग नहीं, मानचित्रण और DTO गुजर के बारे में अनगिनत लेख पढ़ा। मैं समझता हूं कि इसका कोई निश्चित जवाब नहीं है, लेकिन मुझे यकीन नहीं है कि यह ठीक है या सेवाओं से नियंत्रकों के लिए डोमेन मॉडल वापस नहीं कर रहा है। यदि मैं डोमेन मॉडल वापस करता हूं, तो यह अभी भी दृश्य में पारित नहीं हुआ है, क्योंकि नियंत्रक हमेशा दृश्य-विशिष्ट दृश्य मॉडल बनाता है - इस मामले में, यह वैध लगता है। दूसरी ओर, यह तब सही नहीं लगता जब डोमेन मॉडल बिजनेस लेयर (सर्विस लेयर) छोड़ देता है। कभी-कभी सेवा को डेटा ऑब्जेक्ट को वापस करने की आवश्यकता होती है जिसे डोमेन में परिभाषित नहीं किया गया था और फिर हमें या तो डोमेन में नया ऑब्जेक्ट जोड़ना होगा जो मैप नहीं किया गया है, या पीओसीओ ऑब्जेक्ट बनाएं (यह बदसूरत है, क्योंकि कुछ सेवाएं डोमेन मॉडल वापस करती हैं, कुछ प्रभावी रूप से डीटीओ)।
प्रश्न है - अगर हम कड़ाई से दृश्य मॉडल का उपयोग करते हैं, तो क्या डोमेन मॉडल को नियंत्रकों के लिए सभी तरह से वापस करना ठीक है, या हमें सेवा परत के साथ संचार के लिए हमेशा डीटीओ का उपयोग करना चाहिए? यदि हां, तो क्या सेवाओं की आवश्यकता के आधार पर डोमेन मॉडल को समायोजित करना ठीक है? (स्पष्ट रूप से मुझे ऐसा नहीं लगता है, क्योंकि सेवाओं को किस डोमेन का उपभोग करना चाहिए।) यदि हमें डीटीओ से सख्ती से चिपके रहना चाहिए, तो क्या उन्हें सेवा परत में परिभाषित किया जाना चाहिए? (मुझे ऐसा लगता है।) कभी-कभी यह स्पष्ट होता है कि हमें डीटीओ का उपयोग करना चाहिए (उदाहरण के लिए, जब सेवा बहुत सारे व्यापार तर्क देती है और नई वस्तुएं बनाती है), कभी-कभी यह स्पष्ट होता है कि हमें केवल डोमेन मॉडल का उपयोग करना चाहिए (उदाहरण के लिए, जब सदस्यता सेवा एनीमिक उपयोगकर्ता वापस आती है। एस) - ऐसा लगता है कि यह डीटीओ बनाने के लिए बहुत अधिक समझ में नहीं आएगा जो डोमेन मॉडल के समान है) - लेकिन मैं संगतता और अच्छे अभ्यासों को पसंद करता हूं।
आलेख डोमेन बनाम डीटीओ बनाम व्यूमॉडल - उनका उपयोग कैसे और कब करें? (और कुछ अन्य लेख भी) मेरी समस्या से बहुत मिलते-जुलते हैं, लेकिन यह इस सवाल का जवाब नहीं देता है। अनुच्छेद मैं एफई के साथ भंडार पैटर्न में DTOs को लागू करना चाहिए? यह भी समान है, लेकिन यह DDD के साथ सौदा नहीं करता है।
डिस्क्लेमर: मेरा इरादा किसी भी डिज़ाइन पैटर्न का उपयोग करने का केवल इसलिए नहीं है क्योंकि यह मौजूद है और फैंसी है, दूसरी ओर, मैं अच्छे डिज़ाइन पैटर्न और प्रथाओं का भी उपयोग करना चाहूंगा क्योंकि यह एप्लिकेशन को समग्र रूप से डिज़ाइन करने में मदद करता है, अलग होने में मदद करता है। चिंताओं का, यहां तक कि विशेष पैटर्न का उपयोग करने वाले भी "आवश्यक" नहीं हैं, कम से कम फिलहाल।
हमेशा की तरह, धन्यवाद।