का उपयोग करके एसओए आवेदन में डीडीडी के साथ सत्यापन मेरी सेवा मुखौटा परत में, मेरे पास एक सेवा/संचालन के साथ एक सेवा वर्ग है जो एक डीटीओ (डेटा अनुबंध) ऑब्जेक्ट स्वीकार करता है। किसी भी बदलाव को लागू करने के लिए ऑटोमैपर का उपयोग इस डीटीओ को मेरे डोमेन ऑब्जेक्ट के उदाहरण में मैप करने के लिए किया जाता है। अनुरोध मेरी डोमेन सेवा पर पारित किया गया है जो वास्तविक कार्य करता है।आईओसी
public EntityContract AddEntity(EntityContract requestContract)
{
var entity = Mapper.Map<EntityContract, Entity>(requestContract);
var updatedEntity = Service.AddEntity(entity);
var responseContract = Mapper.Map<Entity, EntityContract>(updatedEntity);
return responseContract;
}
सेवा और मैपर गुण आईओसी कंटेनर के रूप में एकता के साथ निर्माता इंजेक्शन का उपयोग कर स्थापित कर रहे हैं: यहाँ क्या विधि नज़र आ सकते हैं।
public Entity AddEntity(Entity entity)
{
// Make changes to entity
Repository.Add(entity);
// Prepare return value
}
भंडार भी निर्माता इंजेक्शन का उपयोग कर सेट किया गया है:
कार्रवाई करते में, डोमेन सेवा इकाई में परिवर्तन तो तरह BREAK परिवर्तनों को लागू करने के लिए भंडार का उपयोग करता है बनाता है।
मुद्दा यह है कि डेटा जारी होने के बाद अन्य ग्राहकों के लिए तत्काल उपलब्ध हो जाता है, इसलिए मुझे यह सुनिश्चित करना होगा कि कोई अमान्य डेटा जारी न रहे। मैंने डीडीडी (इवांस) के साथ-साथ निल्सन की "ब्लू बुक" पढ़ी है और मुझे स्पष्ट नहीं है कि सत्यापन के लिए मुझे क्या दृष्टिकोण लेना चाहिए।
यदि मेरा लक्ष्य इकाई को अमान्य स्थिति में प्रवेश करने से रोकने के लिए है, तो क्या मुझे अपनी सेवा सेवा में इकाई को निष्क्रिय करना चाहिए ताकि यह सुनिश्चित किया जा सके कि सभी नियम मेरी डोमेन सेवा पर अनुरोध पारित करने से पहले संतुष्ट हैं? मैं ऐसा करने में संकोच करता हूं क्योंकि ऐसा लगता है कि मैं सेवा के मुखौटे में परिभाषित इन नियमों के साथ encapsulation तोड़ रहा हूँ।
डोमेन सेवाओं के लिए प्रतिनिधि पतली मुखौटा परत का उपयोग करने का कारण यह है कि हम अपने एपीआई में पाठ्यक्रम-अनाज वाले इंटरफेस का पर्दाफाश कर रहे हैं लेकिन जुर्माना वाली डोमेन सेवाओं की संरचना के माध्यम से पुन: उपयोग का समर्थन करते हैं। ध्यान में रखते हुए कि कई मुखौटा सेवाएं एक ही डोमेन सेवा विधि को कॉल कर सकती हैं, शायद इन नियमों को डोमेन सेवा में शामिल करना बेहतर होगा, इसलिए हम जानते हैं कि प्रत्येक उपयोग मान्य है। या मैं दोनों जगहों में मान्य होना चाहिए?
मैं संपत्ति सेटर्स में गार्ड भी डाल सकता हूं जो इकाई को किसी अमान्य स्थिति में रखने से अस्वीकार्य मानों को रोकता है। इसका मतलब यह होगा कि अमान्य मान को मैप करने का प्रयास करते समय ऑटोमैपर विफल हो जाएगा। हालांकि, जब कोई मान मैप नहीं किया जाता है तो यह मदद नहीं करता है।
मैं अभी भी यह सोच नहीं पा रहा हूं कि ये नियम इकाई के व्यवहार का हिस्सा हैं और यह निर्धारित करना कि वस्तु मान्य है या नहीं, इकाई के भीतर encapsulated किया जाना चाहिए। क्या यह गलत है?
तो सबसे पहले मुझे यह निर्धारित करने की आवश्यकता है कि मैं कब और कहां इन सत्यापन जांच करता हूं। तो मुझे यह पता लगाने की जरूरत है कि DI के साथ कैसे कार्यान्वित किया जाए ताकि निर्भरता को कम किया जा सके।
आप कौन से सुझाव प्रदान कर सकते हैं?
लिंक बहुत अच्छे हैं। अब मुझे यह स्पष्ट है कि इंटरैक्टिव-प्रकार का सत्यापन जो वस्तु को अमान्य स्थिति में जाने की अनुमति देता है और त्रुटियों की एक सूची प्रदान करता है (उदाहरण के लिए IDataErrorInfo के माध्यम से) यूआई/प्रेजेंटेशन लेयर (व्यूमोडेल) में आता है। और मैं अपने डोमेन ऑब्जेक्ट्स में गार्ड को अमान्य स्थिति में जाने से रोकने के लिए अच्छा लगा हूं। लेकिन क्या आप सेवा और/या मुखौटा परत में चेक डालने के खिलाफ वकालत कर रहे हैं जब तक कि वे कई इकाइयों/समेकन नहीं करते? – SonOfPirate
आप आवश्यकतानुसार सेवाओं और यूआई में अतिरिक्त जांच कर सकते हैं। मेरा मुद्दा यह है कि डोमेन ऑब्जेक्ट्स इन चेक पर भरोसा नहीं करना चाहिए। – Dmitry
@SonOfPirate - बस ब्याज की बात के रूप में, मैं अपने डोमेन ऑब्जेक्ट्स में इनवेरिएंट को लागू करने के लिए CodeContracts का उपयोग करता हूं। – RobertMS