मुद्दों आप देख रहे हैं द्वारा डोमेन प्रेरित डिजाइन की वजह से नहीं कर रहे हैं, बल्कि चिंताओं की जुदाई की कमी से। डोमेन संचालित डिजाइन सिर्फ डेटा और व्यवहार को एक साथ रखने के बारे में नहीं है।
पहली बात मैं सिफारिश करेंगे एक दिन का समय ले रही है और Domain Driven Design Quickly जानकारी क्यू से एक मुफ्त डाउनलोड के रूप में उपलब्ध पढ़ रहा है। यह विभिन्न प्रकार के डोमेन ऑब्जेक्ट्स का एक सिंहावलोकन प्रदान करेगा: संस्थाएं, मूल्य वस्तुएं, सेवाएं, भंडार, और कारखानों।
दूसरी बात मैं सिफारिश करेंगे Single Responsibility Principle को पढ़ने जाने के लिए है।
तीसरे बात मैं सुझाव है कि आप Test Driven Development में अपने आप को विसर्जित करने के लिए शुरू होता है। परीक्षणों को लिखकर डिजाइन करना सीखने के दौरान पहले आपको बहुत अच्छा डिजाइन नहीं करना पड़ेगा, वे आपको कमजोर युग्मित डिजाइनों की दिशा में मार्गदर्शन करते हैं और पहले डिजाइन मुद्दों को प्रकट करते हैं।
आपके द्वारा प्रदान किए गए उदाहरण में, वेबसाइट यूज़र के पास निश्चित रूप से बहुत अधिक जिम्मेदारियां हैं। वास्तव में, आपको WebsiteUser
की आवश्यकता नहीं हो सकती है क्योंकि उपयोगकर्ताओं को आम तौर पर ISecurityPrincipal
द्वारा दर्शाया जाता है।
व्यवसायिक संदर्भ की कमी के कारण आपको अपने डिज़ाइन से कैसे संपर्क करना चाहिए, यह सुझाव देना थोड़ा मुश्किल है, लेकिन मैं सबसे पहले आपके सिस्टम में मौजूद प्रत्येक प्रमुख संज्ञा का प्रतिनिधित्व करने वाले कुछ इंडेक्स कार्ड बनाकर कुछ मस्तिष्क-तूफान करने की अनुशंसा करता हूं (जैसे ग्राहक, आदेश, रसीद, उत्पाद, आदि)। शीर्ष पर उम्मीदवार वर्ग के नाम लिखें, आप जो जिम्मेदारियां महसूस करते हैं, वे बाईं ओर कक्षा के लिए निहित हैं, और कक्षाएं इसे सही से सहयोग करेंगे। अगर कुछ व्यवहार ऐसा नहीं लगता है कि यह किसी भी वस्तु से संबंधित है, तो शायद यह एक अच्छा सेवा उम्मीदवार है (यानी प्रमाणीकरण सेवा)।अपने कॉलेजों के साथ मेज पर कार्ड फैलाएं और चर्चा करें। हालांकि इसमें बहुत अधिक मत बनो, क्योंकि यह वास्तव में केवल एक बुद्धिमान डिजाइन अभ्यास के रूप में है। एक व्हाइटबोर्ड का उपयोग करने से कभी-कभी ऐसा करना थोड़ा आसान हो सकता है क्योंकि आप चीजों को चारों ओर स्थानांतरित कर सकते हैं।
दीर्घकालिक, आपको वास्तव में एरिक इवांस द्वारा Domain Driven Design पुस्तक लेनी चाहिए। यह एक बड़ा पढ़ा है, लेकिन आपके समय के लायक है। मैं आपको अपनी भाषा वरीयता के आधार पर Agile Software Development, Principles, Patterns, and Practices या Agile Principles, Patterns, and Practices in C# चुनने की सलाह भी दूंगा।
इस टिप्पणी के लिए धन्यवाद। मैंने श्री इवांस की किताब पढ़ी है। मुझे लगता है कि समस्या तब होती है जब एक इकाई के कई सहयोगी होते हैं। जैसे एक वेबसाइट यूज़र (या प्रिंसिपल) में नवीनतम ऑर्डर, पहला ऑर्डर, एक शॉपिंग कार्ट, पासवर्ड इत्यादि है। ये सभी सीधे वेबसाइट उपयोगकर्ता से संबंधित हैं। – Pablojim
प्रमाणीकरण, लंबित आदेश स्थिति (यानी शॉपिंग कार्ट), और ऑर्डर इतिहास वास्तव में अलग-अलग चिंताएं हैं। किसी दिए गए उपयोगकर्ता के लिए ऑर्डर इतिहास पुनर्प्राप्त करने के व्यवहार को समाहित करने के लिए IArhenticationService में प्रमाणीकरण को खींचने और IOrderHistoryRepository (या शायद एक IOrderHistoryService) बनाने पर विचार करें। –