2016-09-06 7 views
5

समेकन बनाते समय, क्या हमें समेकन के अंदर मूल्य वस्तुएं बनाना चाहिए, या हमें पहले ही बनाए गए मूल्य ऑब्जेक्ट्स को सीटीओआर या फैक्ट्री में पास करना चाहिए।डीडीडी: तत्काल वैल्यू ऑब्जेक्ट्स को कुल के अंदर या पैरामीटर के रूप में पास करें?

public Booking(DateTime arrivalDate, DateTime departureDate) 
{ 
     this.ArrivalAndDepartureinformation = new ArrivalAndDepartureInfo(arrivalDate, departureDate); 
} 

या

public Booking(ArrivalAndDepartureinformation arrivalAndDepartureInfo) 
{ 
      this.ArrivalAndDepartureinformation = arrivalAndDepartureInfo; 
} 
+0

सवाल है: क्या आप उन निर्माताओं का उपयोग कैसे करूँ और जहां उन निर्माता मानकों से आते हैं? –

उत्तर

3

इंस्टेंटिएट वैल्यू ऑब्जेक्ट्स कुल के अंदर या पैरामीटर के रूप में पास करें?

  • अगर हम निर्माता में पैरामीटर प्रदान करने के बारे में बात करते हैं, यह है कि यह कैसे किया जाता है पर निर्भर करता है। कुछ बुनियादी ढांचे की सीमाएं हो सकती हैं जिन्हें आदिम प्रकारों के उपयोग की आवश्यकता हो सकती है।

  • यदि हम तरीकों में पैरामीटर पास करने के बारे में बात करते हैं तो वैल्यू ऑब्जेक्ट्स मेरी पसंद 100% है।

सामान्य तौर पर, मैं कहेंगे यह आपके समुच्चय में मूल्य वस्तुओं पारित करने के लिए बेहतर है।

मूल्य वस्तुओं कर सकते हैं:

आप की
  • मेकअप भाषा अधिक अर्थपूर्ण मॉडल
  • प्रकार सुरक्षा
  • Encapsulate सत्यापन नियमों लाने
  • खुद के व्यवहार
+1

तो इनपुट पैरामीटर जो अनुप्रयोग सेवा पर भेजे जाते हैं, का उपयोग मूल्य वस्तुओं को बनाने के लिए किया जाता है जो कुल फैक्ट्री या कॉन्स्टक्टर – Robert

+0

पर भेजे जाएंगे। और आप अपने पैरामीटर के लिए कम पैरामीटर, अधिक विशिष्ट प्रकार और आपके मॉडल में अधिक अभिव्यक्तिपूर्ण भाषा प्राप्त कर सकते हैं। –

3

डोमेन मॉडल डोमेन, नहीं कार्यान्वयन पुरातन बात करनी चाहिए।

आपका आवेदन घटक आमतौर पर कच्चे डेटा लेने और मॉडल की भाषा में व्यक्त करने की ज़िम्मेदारी का मालिक है।

2

सामान्य दिशानिर्देश मैं सिफारिश करेंगे यह है:

  • डोमेन मॉडल के अंदर, जितना संभव हो वैल्यू ऑब्जेक्ट्स का उपयोग करें।
  • डोमेन मॉडल (नियंत्रक, एप्लिकेशन सेवाओं) की सीमा पर प्राइमेटिव्स को मूल्य ऑब्जेक्ट्स में कनवर्ट करें।

उदाहरण के लिए, बजाय इस की:

public void Process(string oldEmail, string newEmail) 
{ 
    Result<Email> oldEmailResult = Email.Create(oldEmail); 
    Result<Email> newEmailResult = Email.Create(newEmail); 

    if (oldEmailResult.Failure || newEmailResult.Failure) 
     return; 

    string oldEmailValue = oldEmailResult.Value; 
    Customer customer = GetCustomerByEmail(oldEmailValue); 
    customer.Email = newEmailResult.Value; 
} 

यह करें:

public void Process(Email oldEmail, Email newEmail) 
{ 
    Customer customer = GetCustomerByEmail(oldEmail); 
    customer.Email = newEmail; 
} 
संबंधित मुद्दे