मेरी प्रोग्रामिंग भाषा सी # है। मुझे अपने डोमेन मॉडल के भीतर दृढ़ता अज्ञानता के बारे में एक प्रश्न है।लगातार अज्ञानी डोमेन लेयर
मान लेते हैं मैं बहुत की तरह एक व्यक्ति वर्ग मिल गया है दो:
public class Person
{
private string email;
public string Email
{
get { return email; }
set { email = value; }
}
public Person(string email)
{
this.email = email;
}
}
अब, मेरे डोमेन मॉडल के भीतर, वहाँ एक नियम है कि वहाँ एक ही ईमेल पते होने दो व्यक्तियों को नहीं किया जा सकता है। तो जब एक नए व्यक्ति को तुरंत चालू करते हैं, तो इसे ईमेल संपत्ति बदलने के साथ-साथ मान्य होने की आवश्यकता होती है। तो मैं सोच रहा था कि आप अज्ञान डोमेन परत को दृढ़ता से अपने भीतर इस तरह के सत्यापन को कैसे हल करेंगे। मैं वर्तमान में जो करता हूं वह व्यक्ति तत्कालता के लिए फैक्ट्री पैटर्न का उपयोग कर रहा है जिसमें मैं एक व्यक्ति भंडार इंजेक्ट करता हूं। वहां मैं एक ही ईमेल पते के साथ दूसरे व्यक्ति की तलाश कर सकता हूं। इसलिए जैसा:
public class PersonFactory
{
private static readonly IPersonRepository personRepository;
public Person CreateNewPerson(string email)
{
Person personWithSameMail = personRepository.GetPersonByEmail(email);
if (personWithSameMail != null)
throw new ApplicationException("Email already exists.");
return new Person(email);
}
public PersonFactory(IPersonRepository personRepository)
{
this.personRepository = personRepository;
}
}
लेकिन जब लोगों को ई-मेल पते (जो एक वैध व्यापार के मामले हो सकते हैं) को बदलने के लिए इस समाधान, जांच का उपयोग कर अभी भी शामिल नहीं है। इसके अलावा व्यक्ति वर्ग अभी भी एक सार्वजनिक कन्स्ट्रक्टर का खुलासा करता है और फैक्ट्री को छोड़कर, डुप्लिकेट ईमेल पते वाले व्यक्ति अभी भी संभव होंगे।
इस के लिए कोई भी अभ्यर्थी समाधान?
पीएस
शायद इस पूरे प्रश्न अप्रचलित वैसे भी है:;: सभी डेटा केंद्रित लोगों के लिए)
अद्यतन नहीं, मैं नहीं डेटा का उपयोग परत में शिकार ईमेल मान्य करने के लिए चाहते हैं। किसी डोमेन मॉडल संदर्भ के संदर्भ में डुप्लिकेट ईमेल की जांच करने के लिए हमेशा "कुछ" की आवश्यकता होती है जो सभी लोगों के बारे में जागरूक है - एक रूट। "कुछ" एक पता पुस्तिका हो सकती है, या पूरी दुनिया में ईमेल पते वाले सभी व्यक्ति शामिल हो सकते हैं। तो हो सकता है कि मैं प्रोग्रामर को समस्याओं के तकनीकी रूप से सुरुचिपूर्ण समाधानों की आवश्यकता को मिश्रित कर रहा हूं, जो केवल पूर्ण और अच्छी तरह से विचार किए गए डोमेन मॉडल की कमी के कारण मौजूद है। क्या यह मामला यहां हो सकता है? अंतरिक्ष में चारों ओर तैरते हुए एक ईमेल पते वाला कोई व्यक्ति नहीं है (हे, अंतरिक्ष मेरी कुल जड़ होगी;)) केवल अस्तित्व के मजे के लिए? लेकिन अगर यह एक एड्रेस बुक एप्लिकेशन जैसे असली बिजनेस केस होगा, तो एड्रेस बुक व्यक्ति की कुल जड़ होगी और इस प्रकार यह सुनिश्चित करने के लिए सभी आंतरिक लोगों के लिए जांच कर सकता है कि कोई डुप्लिकेट ईमेल पता नहीं है।
आप कन्स्ट्रक्टर आंतरिक क्यों नहीं बनाते हैं और अपडेट करने पर ईमेल पता भी देखते हैं? और मुझे नहीं लगता कि यह कारखाने को भंडार देने का एक अच्छा समाधान है। कारखाने को कॉल करने वाले सेवा फ़ंक्शन को यह जांचना चाहिए कि ईमेल पता पहले से मौजूद है या नहीं। –
@ वाउटरडेकोर्ट: मैं आपकी टिप्पणी से असहमत हूं: (1) सीटीआर आंतरिक बनाना कुछ भी मदद नहीं करता है। यह अभी भी डुप्लिकेट मेल पते वाले उपयोगकर्ताओं के निर्माण की अनुमति देता है। (2) कारखाने को कॉल करने वाली विधि को चेक करना प्रभावी ढंग से उस व्यापार नियम को हटा देता है। यह अब इस नियम को लागू करने के लिए कॉलर तक है। यह बहुत ही खराब एपीआई डिज़ाइन है –
@ डैनियल हिल्गार्थ वह स्पष्ट रूप से उल्लेख करता है कि सार्वजनिक कन्स्ट्रक्टर एक समस्या है। एक कारखाने को सभी निर्भरताओं और आवश्यक मूल्यों के साथ एक वस्तु का निर्माण करना चाहिए। कारखाने के साथ व्यापार तर्क मिलाकर कुछ ऐसा है जो मैं खराब डिजाइन कहूंगा। –