2012-05-30 8 views
6

के साथ डोमेन मॉडल मैं "डीडीडी के साथ डीडी" दुनिया में शुरू करने की कोशिश कर रहा हूं। मैं अपने ओआरएम उपकरण के रूप में NHibernate का उपयोग करता हूं, इस प्रकार एक पीआई (दृढ़ता अज्ञान) मॉडल विकसित करने की कोशिश करता हूं। हालांकि, मेरी कुछ इकाइयों में (जिन्हें पीओसीओएस के रूप में दर्शाया जा रहा है) मेरे पास मेरे गुणों के सेटर्स में व्यवसाय नियम हैं। उदाहरण के लिए, मेरे पास एक "उपयोगकर्ता" इकाई है जिसमें एक ध्वज है जो इंगित करता है कि यह उपयोगकर्ता अवरुद्ध है या नहीं, जब यह ध्वज सत्य है तो "ब्लॉक डेट" नामक दूसरा फ़ील्ड वर्तमान दिनांक के साथ स्वचालित रूप से भरना होगा। सबकुछ बहुत स्पष्ट और सरल प्रतीत होता है, लेकिन इस समस्या में समस्या उत्पन्न होती है कि मैं उन उपयोगकर्ताओं को पुनर्प्राप्त कर रहा हूं जो डेटाबेस में पहले से ही जारी हैं, भले ही अवरुद्ध उपयोगकर्ताओं को उनके "अवरुद्ध तिथियां" अपडेट को वर्तमान दिनांक में अपडेट किया जाएगा, यह तर्क प्रारंभ में मैंने दूसरे ध्वज "आइसलोडेड" में सोचा था जो इंगित करेगा कि ऑब्जेक्ट एनएचबीरनेट द्वारा हाइड्रेटेड किया जा रहा है और फिर यह तर्क लॉन्च नहीं किया जाएगा, हालांकि यह पीआई की तरह प्रतीत नहीं होता था। इसे सुधारने के बारे में कोई सुझाव?निबर्ननेट डिजाइन समस्या

उत्तर

4

आप IsBlocked संपत्ति के लिए अपने मानचित्रण में फ़ील्ड एक्सेस रणनीति को परिभाषित कर सकते हैं। असल में, आप संपत्ति के बजाय अंतर्निहित निजी क्षेत्र (_isBlocked) का उपयोग करने के लिए NHibernate से कहेंगे और इसलिए, IsBlocked संपत्ति में आपका सेटटर तर्क निष्पादित नहीं किया जाएगा।

This SO question एक्सेस रणनीतियों पर एक अच्छा जवाब है।

आधिकारिक एनएचबेर्नेट documentation

Map(x => x.IsBlocked).Access.CamelCaseField(Prefix.Underscore); 
4

NHibernate समस्या के लिए Miroslavs समाधान के अलावा, मैं वास्तव में संपत्ति के पीछे तर्क डालने से दूर जाने की सलाह देते हैं:

आप मानचित्रण के लिए धाराप्रवाह NHibernate का उपयोग कर रहे हैं, तो यह आप इसे कैसे परिभाषित कर सकता है सेटर्स, खासकर जब अन्य क्षेत्रों को बदलने की जरूरत है।

public void Block() 
{ 
    _isBlocked = true; 
    _blockedDate = DateTime.Now; 
} 

क्यों this question के जवाब देखें। इस सिफारिश के लिए

+0

+1 –

संबंधित मुद्दे