में नई इकाई आईडी मैं सीक्यूआरएस और डोमेन इवेंट अवधारणाओं का उपयोग कर एक डोमेन मॉडल के साथ एक एप्लिकेशन बना रहा हूं (लेकिन कोई ईवेंट सोर्सिंग नहीं, केवल सादा पुराना एसक्यूएल)। SomethingChanged तरह की घटनाओं के साथ कोई समस्या नहीं थी। तब मैं SomethingCreated घटनाओं को लागू करने में फंस गया।डोमेन इवेंट
जब मैं कुछ इकाई जो पहचान प्राथमिक कुंजी के साथ एक मेज के लिए मैप किया गया है तो मैं ईद पता नहीं है जब तक इकाई एक समान होती है पैदा करते हैं। इकाई दृढ़ता से अज्ञान है इसलिए जब इकाई के अंदर से एक ईवेंट प्रकाशित करते हैं, तो आईडी को अभी ज्ञात नहीं है - यह जादुई रूप से संदर्भ को कॉल करने के बाद सेट किया गया है। केवल चावे चेंज()। तो मैं इवेंट डेटा में आईडी/कब/कब रख सकता हूं? घटना में इकाई के संदर्भ में भी शामिल है
- :
मैं के बारे में सोच रहा था। यह डोमेन के अंदर काम करेगा लेकिन घटनाओं/संदेशों द्वारा संचारित कई स्वायत्त प्रणाली के साथ एक वितरित वातावरण में नहीं।
- SaveChanges() को ओवरराइड करने के लिए किसी भी तरह से प्रकाशन के लिए लगाए गए ईवेंट अपडेट करें। लेकिन घटनाएं अपरिवर्तनीय होने के लिए हैं, इसलिए यह बहुत गंदा लगता है।
- पहचान फ़ील्ड से छुटकारा पाने और इकाई कन्स्ट्रक्टर में उत्पन्न GUID का उपयोग करना। यह सबसे आसान हो सकता है लेकिन प्रदर्शन को हिट कर सकता है और अन्य चीजों को कठिन बना सकता है, जैसे डीबगिंग या पूछताछ (
where id = 'B85E62C3-DC56-40C0-852A-49F759AC68FB'
,MIN
,MAX
इत्यादि)। मैं कई नमूना अनुप्रयोगों में यही देखता हूं। - हाइब्रिड दृष्टिकोण - अकेले पहचान छोड़ने के लिए और विदेशी कुंजी के लिए मुख्य रूप से इसका इस्तेमाल करते हैं और तेजी से मिलती है लेकिन अद्वितीय पहचानकर्ता है जिसके द्वारा मैं आवेदन में रिपोजिटरी से संस्थाओं खींच के रूप में GUID का उपयोग करें।
घटना में इकाई के लिए एक संदर्भ शामिल न करें। सहेजने के बाद आईडी को ठीक करना ठीक है। इसे प्रकाशन पर अपरिवर्तनीय माना जाना चाहिए। हालांकि अगर आप घटना के उत्पादन के संदर्भ में रीट्रीज़ की अनुमति देने जा रहे हैं तो यह परेशानी हो सकती है।बाहर से आईडी को असाइन करने में मूल्य है, मुझे लगता है कि यह एक डिफ़ॉल्ट रणनीति होनी चाहिए। तो दोनों GUIDs और हाइब्रिड दृष्टिकोण का उपयोग कर काम कर सकते हैं। एक अन्य दृष्टिकोण कुछ हिलो तंत्र या हिमपात की तरह कुछ हो सकता है। –
क्या आप हिलो और हिमपात का विस्तार कर सकते हैं? – Pein
http://nhforge.org/blogs/nhibernate/archive/2009/03/20/nhibernate-poid-generators-revealed.aspx और http://engineering.twitter.com/2010/06/announcing-snowflake.html –