5

जैसा कि मैं इसे समझता हूं, एक यूनिटऑफवर्क कक्षा डोमेन में एक व्यापार लेनदेन की अवधारणा का प्रतिनिधित्व करने के लिए है। यह सीधे डेटाबेस लेनदेन का प्रतिनिधित्व नहीं करना चाहिए, जो केवल एक संभावित कार्यान्वयन का विवरण है।कार्य पैटर्न की इकाई में रोलबैक विधि का इरादा क्या है?

प्रश्न: तो कार्य पैटर्न के यूनिट के बारे में इतना दस्तावेज क्यों "प्रतिबद्ध" और "रोलबैक" विधियों का संदर्भ देता है?

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

अद्यतन:

उत्तर: दोनों नीचे उत्तर सही हैं। वे यूओडब्ल्यू के दो प्रकार हैं: ऑब्जेक्ट पंजीकरण और कॉलर पंजीकरण। ऑब्जेक्ट पंजीकरण में, रोलबैक सभी इन-मेमोरी ऑब्जेक्ट्स में परिवर्तन पूर्ववत करने में कार्य करता है। कॉलर पंजीकरण में, रोलबैक सभी दर्ज किए गए परिवर्तनों को साफ़ करने में कार्य करता है जैसे कि कमेटी के बाद की कॉल कुछ भी नहीं करेगी।

उत्तर

2

कम से कम Patterns of Enterprise Application Architecture में फाउलर द्वारा परिभाषित कार्य डिजाइन पैटर्न की इकाई - ऑब्जेक्ट- संबंध दृढ़ता मैपिंग से संबंधित कार्यान्वयन विवरण है। यह इवांस 'Domain Driven Design में परिभाषित एक इकाई नहीं है।

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

बिजनेस इकाइयां इसे कॉल करते समय कॉल करते हैं। जब उनकी स्थिति बदल जाती है, तो वे स्वयं को यूनिट ऑफ वर्क के साथ गंदे के रूप में पंजीकृत करते हैं। फिर कार्य इकाई commit() ऑब्जेक्ट ग्राफ़ को लिखने के संदर्भ में पूरे दृढ़ता लेनदेन को संभालती है और rollback() का मतलब है कि संस्थाओं की स्थिति को वे जो भी थे, को बहाल करना है। तो इसका "कार्यान्वयन" के माध्यम से कार्यान्वयन बहुत अधिक है, लेकिन इसका इरादा बहुत स्पष्ट है।

दूसरी ओर, "पूर्ववत करें" और "पूर्ण" आवश्यक रूप से इस परिभाषा के साथ एक-दूसरे को मानचित्र नहीं बनाते हैं। व्यवसाय संदर्भ के आधार पर एक "पूर्ववत करें" या "साफ़ करें" केवल ऑब्जेक्ट ग्राफ़ को आंशिक रूप से रोलबैक कर सकता है। जबकि "पूर्ण" कुछ इकाई पर राज्य को बदलने के साथ-साथ ग्राफ को बदल सकता है। इस प्रकार मैं इन तरीकों को व्यावसायिक अर्थ के साथ, सेवा परत या कुल रूट ऑब्जेक्ट पर रखूंगा।

+0

दिलचस्प, धन्यवाद। हालांकि मैं इस बात से असहमत हूं कि यूओडब्ल्यू केवल आरडीबीएमएस से संबंधित है (वस्तु डीबी, या लेनदेन संबंधी स्मृति के बारे में क्या है)। वैसे भी, आपके उत्तर ने मुझे और अधिक शोध करने के लिए प्रेरित किया और मैं http://takacsot.freeblog.hu/Files/martinfowler/unitOfWork.html पर ठोकर खाई। मैं देखता हूं कि दो प्रकार के यूओडब्ल्यू हैं: कॉलर पंजीकरण और ऑब्जेक्ट पंजीकरण। मैंने ऑब्जेक्ट रजिस्ट्रेशन (एनएचबीरनेट सत्रों के माध्यम से) का उपयोग किया था, लेकिन मुझे इसके पीछे यूओडब्लू पैटर्न के बारे में स्पष्ट रूप से पता नहीं था।एक बार फिर धन्यवाद। –

+0

@gWiz: क्या आप असहमत हैं यूओडब्ल्यू एक कार्यान्वयन विस्तार है? यदि आप सहमत हैं, तो केवल उन्हीं बिंदुओं को पार कर रहा है, जिन तरीकों से आप व्यवसाय प्रयोक्ता के साथ चर्चा करेंगे, यूओडब्ल्यू पर दिखाई नहीं दे रहा है। जहां तक ​​आरडीबीएमएस बनाम अन्य दृढ़ता है, यह एक अर्थपूर्ण तर्क है, आपका व्यावसायिक उपयोगकर्ता अभी भी परवाह नहीं करता है - यूओएफडब्ल्यू जो कुछ भी लागू होता है - मेरा उत्तर अपडेट कर दिया गया है क्योंकि इसका मतलब केवल संबंधपरक पर लागू होना नहीं था। – orangepips

+0

दिलचस्प। मुझे लगता है कि यूओडब्ल्यू एक कार्यान्वयन विस्तार है, लेकिन "व्यापार लेनदेन" की डोमेन अवधारणा का डोमेन विशेषज्ञों के लिए महत्वपूर्ण है। विशेषज्ञ "कमिट" या "रोलबैक" नहीं कहते हैं, लेकिन वे कह सकते हैं "यदि बी स्वीकार नहीं किया गया है, तो ए को न बदलें"। ऐसा इसलिए है क्योंकि एक व्यापार लेनदेन का विचार छुपा/अपेक्षित है। मैं तर्क दूंगा कि सामान्य रूप से, डीडीडी में सेवाओं के नाम पर "लेनदेन" होना चाहिए (और कार्यान्वयन में यूओडब्ल्यू का उपयोग कर सकते हैं)। –

1

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

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