इसलिए, मैंने यहां विशिष्टता पैटर्न के बारे में कुछ पोस्ट देखी हैं, और अभी तक इसका कोई जवाब नहीं मिला है।किस परत में विशिष्टता पैटर्न वस्तुओं को "नया 'होना चाहिए?
मेरा प्रश्न एक एन-स्तरित वास्तुकला में है, जहां मुझे वास्तव में विनिर्देशों को "नया" होना चाहिए?
मैं उन्हें अपने सेवा परत में डाल सकता है (उर्फ, आवेदन परत यह कभी कभी कहा जाता है ... मूल रूप से, कुछ एक .aspx कोड-पीछे से बात करेंगे), लेकिन मुझे लगता है कि, मैं ऐसा करके मन मैं व्यापार नियमों को डोमेन से बाहर निकालने दे रहा हूं। यदि डोमेन ऑब्जेक्ट्स को किसी अन्य तरीके से एक्सेस किया जाता है (सेवा परत के अलावा), डोमेन ऑब्जेक्ट्स अपने व्यवसाय नियमों को लागू नहीं कर सकता है।
मैं कन्स्ट्रक्टर इंजेक्शन के माध्यम से अपने मॉडल वर्ग में विशिष्टता इंजेक्ट कर सकता हूं। लेकिन फिर, यह "गलत" लगता है। मुझे लगता है कि मॉडल वर्गों में इंजेक्शन की जाने वाली एकमात्र चीज़ कैसींग, लॉगिंग, गंदे-झंडे ट्रैकिंग आदि जैसी "सेवाएं" हैं ... और यदि आप इससे बच सकते हैं, मॉडल के रचनाकारों को कूड़ेदान के बजाय पहलुओं का उपयोग करने के लिए सेवा इंटरफेस के साथ कक्षाओं।
मैं विधि इंजेक्शन (कभी-कभी "डबल डिस्पैच" के रूप में संदर्भित) के माध्यम से विशिष्टता इंजेक्ट कर सकता हूं, और स्पष्ट रूप से उस विधि को अपने व्यापार नियम को लागू करने के लिए इंजेक्शन विशिष्टता को समाहित करता है।
एक "डोमेन सेवा" कक्षा बनाएं, जो कन्स्ट्रक्टर इंजेक्शन के माध्यम से विशिष्टता लेती है, और उसके बाद सर्विस लेयर डोमेन ऑब्जेक्ट को समन्वयित करने के लिए डोमेन सेवा का उपयोग करने दें। यह मेरे लिए ठीक लगता है, क्योंकि विशिष्टता द्वारा लागू नियम अभी भी "डोमेन" में है, और डोमेन सेवा वर्ग को डोमेन ऑब्जेक्ट की तरह बहुत अधिक नामित किया जा सकता है। यहां बात यह है कि मुझे लगता है कि मैं कक्षाओं और कोड के बहुत सारे लिख रहा हूं, बस विशिष्टता पैटर्न को "ठीक से" लागू करने के लिए।
इसमें जोड़ें, प्रश्न में विशिष्टता को यह निर्धारित करने के लिए एक रिपोजिटरी की आवश्यकता होती है कि यह "संतुष्ट" है या नहीं।
यह संभावित रूप से प्रदर्शन समस्याओं का कारण बन सकता है, esp। अगर मैं कन्स्ट्रक्टर इंजेक्शन का उपयोग करता हूं बी/सी उपभोग करने वाला कोड ऐसी संपत्ति को कॉल कर सकता है जो शायद विशिष्टता को लपेटता है, और वह बदले में डेटाबेस को कॉल कर रहा है।
तो लेखों के किसी भी विचार/विचार/लिंक?
नए होने और विनिर्देशों का उपयोग करने के लिए सबसे अच्छी जगह कहां है?
यह भी सुनिश्चित नहीं है कि एक विशिष्टता में एक रेपॉजिटरी इंजेक्शन एक कोड गंध है या नहीं। इस स्टैक ओवरफ्लो चर्चा की जांच करें: [लिंक] (http://stackoverflow.com/questions/5818898/where-to-put-global- नियम- validation-in-ddd)। एक विशिष्टता और एक डोमेन सेवा के बीच समानताएं बहुत समान हो सकती हैं, खासकर यदि नियम जिसे आप लागू/साबित करने के लिए प्रयास कर रहे हैं, पहले रिपोजिटरी के माध्यम से जानकारी प्राप्त करने पर निर्भर होना होता है। –
आप एक भंडार के लिए एक विनिर्देश पास करते हैं, उदा। FindOne (spec) या FindAll (spec) के माध्यम से।यदि आप एक विनिर्देश में एक भंडार इंजेक्ट करते हैं तो आप एक परिपत्र संदर्भ बनाने के खतरे में हैं, जिससे समस्याएं पैदा हो सकती हैं। – autonomatt