विनिर्देश
मुझे पता है कि आपने पहले ही एक उत्तर स्वीकार कर लिया है, लेकिन, आपने DDD के बारे में पूछा, और इसके लिए सटीक मिलान वही है जिसे इवांस 'विनिर्देशन' कहते हैं:
प्रत्यक्ष Google पुस्तकें लिंक
यदि वह लिंक इन परिणामों में पुस्तक के लिए काम नहीं करता है
यदि आपके पास पुस्तक है तो यह पृष्ठ २२६ है।
पृष्ठ पर 227 विनिर्देशों के लिए 3 उपयोग हैं: सत्यापन, विभाजन, एक नई विशेष वस्तु का निर्माण। आपका 'चयन' है - IsExpired।
'विशिष्टता' अवधारणा के बारे में एक और बात यह है कि यह स्वीकार करता है कि - दक्षता के लिए - आपको इन-मेमोरी ऑब्जेक्ट्स पर काम करने के लिए कोड के एक संस्करण की आवश्यकता हो सकती है, और कोड के किसी अन्य संस्करण को पहली बार प्राप्त किए बिना भंडार को कुशलतापूर्वक क्वेरी करने के लिए। सभी वस्तुओं को स्मृति में।
एक साधारण दुनिया में, इसका मतलब होगा कि आपके मॉडल में एक रिपॉजिटरी में एक SQL संस्करण और एक ऑब्जेक्ट संस्करण है, जिसमें निश्चित रूप से कमियां हैं। तर्क 2 स्थानों पर है (बुरा है, किसी को उन स्थानों पर अपडेट करने के लिए भूल जाना है) और आपकी रिपॉजिटरी में डोमेन लॉजिक है।
तो इसका जवाब तर्क के दोनों सेटों को एक विनिर्देश में रखना है। इन-मेमोरी संस्करण, जाहिर है, लेकिन एक रिपॉजिटरी संस्करण भी है। यदि आप उदाहरण के लिए एन-हाइबरनेट का उपयोग कर रहे हैं तो आप रिपॉजिटरी संस्करण के लिए इसकी अंतर्निहित क्वेरी भाषा का उपयोग कर सकते हैं।
अन्यथा आपको इस विनिर्देश के लिए एक विशेष रिपॉजिटरी विधि बनानी होगी जो कि विनिर्देश ऑब्जेक्ट से उपयोग की जाती है। विनिर्देशन से मेल खाने वाली वस्तुओं के कोलीसैटन के लिए कॉल विनिर्देशन के माध्यम से जाएंगे, न कि भंडार। और कम से कम कोड 'i'm 2 स्थानों पर चिल्लाता है, भविष्य के रखवाले को मत भूलना'। इसी तरह की समस्या के समाधान के लिए पृष्ठ 231-232 पर एक अद्भुत उदाहरण है।
विनिर्देश डीडीडी की 'शुद्धता' का 'अनुमत' रिसाव / स्लिपेज है। यह अभी भी विभिन्न उद्देश्यों के लिए आपकी आवश्यकताओं की पूर्ति नहीं कर सकता है। उदाहरण के लिए, ORM खराब SQL उत्पन्न कर सकता है; बहुत अधिक अतिरिक्त कोडिंग हो सकती है। तो आपको रिपॉजिटरी मेथड को कॉल करना पड़ सकता है जैसे कि यह लगभग स्पेसिफिकेशन में एसक्यूएल लगाने जैसा है। बेशक एक बुरी बात है। लेकिन मत भूलो, आपके कार्यक्रम को उचित गति से काम करना है। इसमें डीडीडी शुद्धता पुरस्कार जीतने की जरूरत नहीं है। तो डेटास्टोर्स को स्विच करने की वास्तविकता का मतलब हो सकता है कि कार्यक्रम के दौरान पुराने ज़माने के शल्यचिकित्सा हो। साथ ही एक बुरी बात भी। लेकिन एक धीमी (उर्फ SUCKing) कार्यक्रम जितना बुरा नहीं है। यदि विभिन्न डीबी पर बॉक्स से बाहर भागना एक वास्तविकता है, तो जाहिर है, आप प्रत्येक विनिर्देश के लिए प्रत्येक डेटास्टोर के लिए व्यावसायिक नियमों की नकल करेंगे। कम से कम आपके पास इस मामले पर अपनी उंगली है और आप रिपॉजिटरी स्वैप करते समय रणनीति पैटर्न का उपयोग कर सकते हैं। लेकिन अगर आप एक विशिष्ट डीबी का उपयोग कर रहे हैं तो पहले से ही याद रखेंYAGNI।
CQRS के बारे में: ऊपर से pdr द्वारा फाउलर का उद्धरण अभी भी यहाँ सही है: "कमांड और क्वेरी के लिए समान वैचारिक मॉडल होने से एक और अधिक जटिल मॉडल बन जाता है जो न तो अच्छा होता है" ... और आपको CQRS या समान का उपयोग करने की आवश्यकता हो सकती है। लेकिन यह एक विकास और रखरखाव के दृष्टिकोण से बहुत अधिक महंगा है। यदि आप दूसरों के साथ प्रतिस्पर्धा में एक पैकेज विक्रेता हैं, तो यह भुगतान कर सकता है। यदि आप एक ग्राहक के लिए एक कस्टम LOB ऐप लिख रहे हैं, तो पूर्णता के लिए शूटिंग एक खराब विकल्प है। आपको यह तय करने की आवश्यकता है कि पूरी तरह से या ज्यादातर डबल मॉडल होने का मूल्य अतिरिक्त प्रयास के लायक है या नहीं। विशिष्टताएक अच्छा समझौता है क्योंकि यह आपको इस अलगाव को उस कार्यक्रम के सिर्फ एक छोटे हिस्से में करने की अनुमति देता है, जिसकी आवश्यकता (विकास) गति और एक मॉडल की सादगी के साथ है। सौभाग्य!