मैंने हाल ही में इवांस की डोमेन-संचालित डिज़ाइन पुस्तक पढ़ना शुरू कर दिया और डीडीडी में कुछ अनुभव प्राप्त करने के लिए एक छोटा सा नमूना प्रोजेक्ट शुरू किया। साथ ही मैं मोंगोडीबी के बारे में और जानना चाहता था और मोंगोडीबी और नवीनतम आधिकारिक सी # ड्राइवर के साथ अपने एसक्यूएल ईएफ 4 रिपॉजिटरीज को बदलना शुरू कर दिया। अब यह सवाल मोंगोडीबी मैपिंग के बारे में है। मैं देखता हूं कि सार्वजनिक गेटर्स और सेटर्स के साथ साधारण वस्तुओं को मैप करना बहुत आसान है - वहां कोई दर्द नहीं है। लेकिन मुझे सार्वजनिक संस्थाओं के बिना डोमेन इकाइयों का मानचित्रण करने में कठिनाइयां हैं। जैसा कि मैंने सीखा, वैध इकाई बनाने के लिए एकमात्र वास्तव में साफ दृष्टिकोण है कि आवश्यक पैरामीटर को कन्स्ट्रक्टर में पास करना है। निम्नलिखित उदाहरण पर विचार करें:सी # मोंगो डीबी: डोमेन ऑब्जेक्ट को सही ढंग से कैसे मैप करें?
public class Transport : IEntity<Transport>
{
private readonly TransportID transportID;
private readonly PersonCapacity personCapacity;
public Transport(TransportID transportID,PersonCapacity personCapacity)
{
Validate.NotNull(personCapacity, "personCapacity is required");
Validate.NotNull(transportID, "transportID is required");
this.transportID = transportID;
this.personCapacity = personCapacity;
}
public virtual PersonCapacity PersonCapacity
{
get { return personCapacity; }
}
public virtual TransportID TransportID
{
get { return transportID; }
}
}
public class TransportID:IValueObject<TransportID>
{
private readonly string number;
#region Constr
public TransportID(string number)
{
Validate.NotNull(number);
this.number = number;
}
#endregion
public string IdString
{
get { return number; }
}
}
public class PersonCapacity:IValueObject<PersonCapacity>
{
private readonly int numberOfSeats;
#region Constr
public PersonCapacity(int numberOfSeats)
{
Validate.NotNull(numberOfSeats);
this.numberOfSeats = numberOfSeats;
}
#endregion
public int NumberOfSeats
{
get { return numberOfSeats; }
}
}
स्पष्ट रूप से स्वैपिंग यहां काम नहीं करती है। अब मैं उन तीन वर्गों को BsonClassMaps
के माध्यम से हाथ से मैप कर सकता हूं और वे बस ठीक से संग्रहीत किए जाएंगे। समस्या यह है कि, जब मैं उन्हें डीबी से लोड करना चाहता हूं तो मुझे उन्हें BsonDocuments
के रूप में लोड करना होगा, और उन्हें अपने डोमेन ऑब्जेक्ट में पार्स करना होगा। मैंने बहुत सी चीजों की कोशिश की लेकिन आखिरकार एक साफ समाधान पाने में असफल रहा। क्या मुझे वास्तव में मोंगोडीबी के लिए सार्वजनिक गेटर्स/सेटर्स के साथ डीटीओ का उत्पादन करना है और उनको अपने डोमेन ऑब्जेक्ट्स पर मैप करना है? शायद कोई मुझे इस पर कुछ सलाह दे सकता है।
यह काम करता है! मुझे विश्वास नहीं है कि मुझे यह याद आया। मुझे लगता है कि इतने बड़े पैमाने पर अनुप्रयोगों के लिए, निजी क्षेत्रों से "पठनीय" को हटाने से डीटीओ की अतिरिक्त परत नहीं बनने के लिए स्वीकार्य ट्रेडऑफ है। जैसा कि आपने बताया है, किसी को ctor को छोड़कर अमान्य वस्तुओं को बनाने के लिए सावधान रहना होगा। फिर भी, मैं ब्रायन और नील्स को उनके उत्तरों के लिए भी धन्यवाद देना चाहता हूं। आप सभी ने मुझे थोड़ा चालाक बना दिया, धन्यवाद। – hoetz
छोटा बिंदु: पाठक क्षेत्र को हटाकर इसे 'सार्वजनिक ऑब्जेक्ट आईडी आईडी {प्राप्त करें; निजी सेट; } 'ऑटो-प्रॉपर्टी और फ़ील्ड को पूरी तरह से हटाया जा सकता है। –
हालांकि यह एक संभावित समाधान है, ** यह अभी भी आपके मॉडल ** को प्रभावित करता है, जो कि आपके द्वारा दिए गए ठोस उदाहरण में फ़ील्ड की आवश्यकता है जिसे 'रीडोनली' नहीं किया जाता है। प्रत्येक टीम को खुद को तय करना होगा कि यह उनके प्रोजेक्ट के लिए स्वीकार्य है या नहीं। – theDmi