पृष्ठभूमि: अपनी स्पष्टता/आत्म शिक्षा के लिए, मैं टीडीडी + डीडीडी का उपयोग करके एक साधारण ऑर्डर एंट्री एप्लिकेशन को लागू करने की कोशिश कर रहा हूं। मेरा प्राथमिक लक्ष्य चिंताओं को अलग करके वास्तुकला को साफ रखना है।डीडीडी + स्तरित आर्किटेक्चर में ऑटोमैपर को कार्यान्वित करने के लिए
मैं चार परतों (अब के लिए) ...
हठ/DAL एक CustomerRepository वर्ग है कि "सकल रूट" पर GetById, सहेजें, कार्रवाई कर सकते हैं के साथ, एक ग्राहक और इससे संबंधित आदेश है और ऑर्डर इटम्स। "गरीब व्यक्ति की निर्भरता इंजेक्शन" की अनुमति देने के लिए
डोमेन/बीएलएल परत जिसमें "व्यावसायिक इकाई" वर्ग शामिल हैं जो नए आदेश बनाने में मदद करने के लिए जुर्माना संचालन करते हैं, कर आकार, टैक्स, छूट, शिपिंग आकार को ऑर्डर आकार के आधार पर लागू करते हैं और ग्राहक स्थान
आवेदन फेकाडे (ऐप सेवाएं/ऑर्केस्ट्रेशन) जिसमें "व्यापारिक संस्थाएं" को व्यवस्थित करने और प्रस्तुति (और संभावित रूप से एक वेब सर्विसेज परत) को छेड़छाड़ करने के लिए चंकी, कोसर-ग्रेनेड कक्षाएं शामिल हैं।
प्रस्तुति परत
इसके अलावा, मैं POCO डीटीओ के पारित करने के लिए कुंजी परतों के बीच ... विशेष रूप से हठ => डोमेन परतों के बीच, और ApplicationFacade => प्रस्तुति परतों चाहते हैं। इसलिए, मेरे पास एक साझा पैकेज में परिभाषित उचित संबंधों के साथ ग्राहक डॉट, ऑर्डर डीटी, ऑर्डर इटैम है।
मैं कन्स्ट्रक्टर इंजेक्शन का उपयोग कर ग्राहक "व्यापार इकाई" कक्षा में आईसी कस्टमर रिपोजिटरी के कार्यान्वयन को इंजेक्ट करना चाहता हूं, फिर निर्माण/अद्यतन प्रक्रिया को बंद करने के लिए "व्यापार इकाई" पर एक ग्राहक.Save() को कॉल करें, अंत में कॉल करना ग्राहक रिपोजिटरी पर सहेजें विधि। आखिरकार, ग्राहक "कुल रूट" है और इसमें सहेजने के लिए आवश्यक सभी जानकारी है ... यह इंजेक्शन ग्राहक रिपोजिटरी का "रखरखाव" भी है।
समस्या: यह वह जगह है जहां मैंने एक झटका मारा। मैं डोमेन/बीएलएल लेयर को जितना संभव हो सके शुद्ध रखना चाहता हूं और इसे किसी तीसरे पक्ष के फ्रेमवर्क और एपीआई, पर जोड़ना चाहता हूं लेकिन ग्राहक। सेव() विधि को ग्राहक "कुल रूट" और उसके सभी ऑर्डर का अनुवाद करने की आवश्यकता है और इंजेक्शन पर्सिस्टेंस लेयर कस्टमर रिपोजिटरी में परिवहन के लिए अपने डीटीओ संस्करणों में ऑर्डर करें ... और यह ऑटोमैपर के लिए एक नौकरी है।
समस्या यह है ... यदि मैं डोमेन/बीएलएल परत में ऑटोमैपर नहीं डालता, तो मुझे वास्तव में नहीं है जहां जाना चाहिए।
इसे एप्लिकेशन फ़ैकेड में डालने का अधिकार नहीं है, भले ही यह नौकरी ऑर्केस्ट्रेशन है।
यह निश्चित रूप से डोमेन/बीएलएल परत में डालने का अधिकार नहीं है क्योंकि मैं इसे प्राचीन रखना चाहता हूं।
इसलिए, मुझे लगता है कि मुझे कुछ याद आया है ... कि मैं इस कार्य को पूरा करने के लिए काम करने वाले हिस्सों को एक साथ कैसे आना चाहिए, इस बारे में एक मूलभूत गलतफहमी के साथ आ रहा हूं। कोई सुझाव? (कृपया नम्र रहो, मैं ये सब नया हूं, और नया करने के लिए नया हूं। मुझे बताएं कि मुझे अब तक जो कुछ है, उसके बारे में कुछ कोड दिखाना है।)
वाह, धन्यवाद! उत्कृष्ट जवाब मैं पहले दो अनुच्छेदों के साथ पूरी तरह से बोर्ड पर हूं - जिन भेदों को आप फेरेट कर चुके हैं वे स्पॉट पर हैं। पिछले दो अनुच्छेदों को मुझे पचाने के लिए और अधिक समय चाहिए, आपके द्वारा किए गए कुछ संदर्भों (विशेष रूप से हेक्सागोनल आर्किटेक्चर और खुली मेजबान सेवा) पर पढ़ें और देखें कि यह मेरे छोटे प्रयोग को कैसे प्रभावित करता है। जवाब देने के लिए बहुत समय के लिए धन्यवाद। –
तीसरे पैराग्राफ की आखिरी वाक्य के बारे में अनुवर्ती ... एप्लिकेशनफैक्ड/सेवा परत से डीटीओ वापस करने के लिए मेरा तर्क - प्रस्तुति परत में पीओसीओ "व्यापार संस्थाओं" के लौटने वाले उदाहरणों के विपरीत - फाइनर-ग्रेनेड को छिपाना था डोमेन/बीएलएल परत में प्रत्येक व्यावसायिक संस्थाओं पर परिभाषित विधियां। मैं उन फाइनर-ग्रेनेड विधियों को एप्लिकेशनफैक्ड/सेवा परत द्वारा प्रजनन परत नहीं लेना चाहता हूं। तो, उस के प्रकाश में, क्या मुझे कुछ करना चाहिए? मैंने कुछ लोगों को अपनी व्यावसायिक संस्थाओं के लिए इंटरफेस परिभाषित किया है। –
मैं डोमेन ऑब्जेक्ट्स के लिए इंटरफेस को परिभाषित नहीं करता क्योंकि डीटीओ और डोमेन ऑब्जेक्ट हमेशा एक-एक नहीं होते हैं। आप एप्लिकेशन सेवाओं और प्रस्तुति परत के बीच पास करने के लिए केवल डीटीओ बना सकते हैं और उन्हें एप्लिकेशन सेवा के अंदर ऑटोमैपर के साथ मैप कर सकते हैं। फिर, ये डीटीओ आवश्यक रूप से किसी डोमेन ऑब्जेक्ट से मेल नहीं खाते हैं। वे या तो एक विशिष्ट अनुप्रयोग सेवा उपयोग केस विधि या वापसी मूल्यों के लिए तर्क प्रस्तुत कर सकते हैं। उपयोग के मामले के लिए जो एक नई इकाई बनाता है, डीटीओ संबंधित डोमेन ऑब्जेक्ट की तरह बहुत कुछ देख सकता है। – eulerfx