मैं एनएचबीरनेट द्वारा पहले से प्रदान किए गए पहले के ऊपर एक यूओडब्ल्यू कार्यान्वयन कब लिखूंगा? कोई वास्तविक दुनिया उदाहरण?मैं NHBernate सत्र के शीर्ष पर वर्क पैटर्न का यूनिट क्यों उपयोग करूंगा?
उत्तर
काम आप का वर्णन कर रहे हैं पहले से ही NHibernate द्वारा प्रदान की जाती है की इकाई तो वहाँ की एक ऐसी इकाई ऐसा करने के लिए कोई कारण नहीं है काम।
हमारे डब्ल्यूसीएफ सेवा में हमारे पास जो काम है वह उच्च स्तर की इकाई है जिसमें काम की वर्तमान इकाई के लिए हमारे आवेदन में महत्वपूर्ण जानकारी शामिल है। इसमें हमारे लिए NHibernate ISession को सारणित करना शामिल है। जब आप इसे तोड़ते हैं तो आपके पास कोड है जो तीन श्रेणियों में फिट बैठता है
कोड जो यूनिट ऑफ वर्क से निपटने की आवश्यकता है। इससे कोई फर्क नहीं पड़ता कि काम की इकाई का समर्थन कौन करता है। यह NHibernate, iBatis या एक कस्टम ORM हो सकता है। सभी कोड को लोड, रोलबैक, सेव इत्यादि करना है। यह ऐसा करने के लिए उपयोग की जाने वाली तंत्र के बारे में भी नहीं है।
कोड जो किसी ISession से सीधे निपटने की आवश्यकता है क्योंकि यह NHibernate विशिष्ट चीजें कर रहा है। आम तौर पर इसे जटिल प्रश्नों के साथ करना पड़ता है जिन्हें बनाने की आवश्यकता होती है।
यह जानने की आवश्यकता नहीं है कि यह कार्य इकाई में चल रहा है या आईएसशन तक पहुंच रहा है। हम इस चर्चा के हिस्से के रूप में इसे पूरी तरह से अनदेखा कर सकते हैं।
1. में कोड सिर्फ एक ISession के खिलाफ काम कर सकता था जबकि हमारे वरीयता कोड है कि हम सीधे नियंत्रित नहीं करते हैं या कि बदल सकता है में सार दूर बातें करने की कोशिश की है। इसके दो कारणों के लिए मूल्य है।
जब हमने शुरू किया हम एनएचबर्ननेट पर 100% बेचे गए नहीं थे। हम iBatis या कुछ कस्टम पर विचार कर रहे थे। जाहिर है यह अब कोई मुद्दा नहीं है।
पूरी टीम एनएचबेर्नेट में विशेषज्ञ नहीं हैं और न ही हम उन्हें बनना चाहते हैं। अधिकांश भाग के लिए लोग कोड लिखते हैं जो श्रेणी 1 में फिट बैठता है और जो कुछ वे जानते हैं वह हमारी कार्य इकाई है। जब श्रेणी 2 में कोड लिखा जाना है तो यह उस टीम के लोगों द्वारा लिखा जाता है जो एनएचबीर्नेट को अच्छी तरह से समझते हैं।
तो मैं कहूँगा कि यूनिट के प्रकार कार्य के बारे में आप की जरूरत नहीं है मेरा सुझाव है कि काम के एक उच्च स्तर यूनिट मूल्य का एक बहुत प्रदान कर सकते हैं बात कर रहे हैं बंद हुआ। प्रारंभ - - प्रतिबद्ध - रोलबैक - IDisposable.Dispose
मैं दोनों सत्र और लेनदेन के प्रबंधन के लिए इसका इस्तेमाल करते हैं
बशर्ते आप अपने सभी मैपिंग्स को सही तरीके से स्थापित करें (यानी कैस्केड), आपको कुछ भी विशेष करने की ज़रूरत नहीं है और ISession
ठीक काम करेगा। हालांकि, यदि आप 3-स्तरीय एप्लिकेशन लिख रहे हैं, तो आपको एक ही लेन-देन में किए जाने वाले डेटाबेस ऑपरेशंस को मैन्युअल रूप से अनुक्रमित करना होगा। फाउलर की "संदर्भ कार्यान्वयन" "उद्यम अनुप्रयोग वास्तुकला के पैटर्न" में एक अच्छा प्रारंभिक बिंदु हो सकता है:
class UnitOfWork...
public void registerNew(DomainObject obj) {
Assert.notNull("id not null", obj.getId());
Assert.isTrue("object not dirty", !dirtyObjects.contains(obj));
Assert.isTrue("object not removed", !removedObjects.contains(obj));
Assert.isTrue("object not already registered new", !newObjects.contains(obj));
newObjects.add(obj);
}
public void registerDirty(DomainObject obj) {
Assert.notNull("id not null", obj.getId());
Assert.isTrue("object not removed", !removedObjects.contains(obj));
if (!dirtyObjects.contains(obj) && !newObjects.contains(obj)) {
dirtyObjects.add(obj);
}
}
public void registerRemoved(DomainObject obj) {
Assert.notNull("id not null", obj.getId());
if (newObjects.remove(obj)) return;
dirtyObjects.remove(obj);
if (!removedObjects.contains(obj)) {
removedObjects.add(obj);
}
}
public void registerClean(DomainObject obj) {
Assert.notNull("id not null", obj.getId());
}
यह एक 3 स्तरीय ऐप है। हालांकि, हम चाहते हैं कि प्रत्येक उपयोगकर्ता परमाणु होने का अनुरोध करें, इसलिए 1 उपयोगकर्ता अनुरोध = 1 डीबी लेनदेन। मैं उपयोगकर्ता अनुरोध को संसाधित करूंगा, डोमेन ऑब्जेक्ट्स को संशोधित करूंगा, और फिर एनएचबीर्नेट से मेरी कुल रूट को जारी रखने के लिए कहूंगा। – ng5000
यह एक पहचान मैप पर एक अमूर्त है। यह उपयोगी होता है जब आप फाउलर के पीओईए में वर्णित मैन्युअल डेटामैपिंग बनाते हैं, लेकिन एनएचबेर्नेट के साथ, क्योंकि पहचानमैप ISession में बनता है। – Paco
काम इंटरफ़ेस की मेरी बुनियादी इकाई निम्न विधियों शामिल हैं। यह उपयोगी है क्योंकि मुझे अलग-अलग सत्र स्कॉप्स के लिए बार-बार कोड लिखना नहीं है।(प्रति अनुरोध कार्य की इकाई, अनुरोधों की प्रति श्रृंखला, प्रति थ्रेड, आदि)
क्या आप कोई उदाहरण पोस्ट कर सकते हैं? –
किस तरह का उदाहरण? काम की इकाई या काम की इकाई का उपयोग कर? – Paco
आपने विभिन्न सत्र क्षेत्रों से कैसे निपटारा? –
- 1. इस प्रश्न में मैं किस डिजाइन पैटर्न का उपयोग करूंगा?
- 2. आईओसी, निर्भरता इंजेक्शन, वर्क ऑफ यूनिट
- 3. मैं अपने क्लासपाथ में वाइल्डकार्ड का उपयोग क्यों नहीं करूंगा?
- 4. एंड्रॉइड: मैं किस छवि प्रारूप का उपयोग करूंगा और क्यों?
- 5. मैं uncaught_exception का उपयोग कब करूंगा?
- 6. क्या इकाई फ्रेमवर्क ऑब्जेक्ट कॉन्टेक्स्ट वर्क पैटर्न के यूनिट के सही कार्यान्वयन है?
- 7. आईओसी के शीर्ष पर सार कारखाना पैटर्न?
- 8. मेरे एमवीसी को अगले स्तर पर ले जाना: डीआई और वर्क ऑफ यूनिट
- 9. प्रिज्म 4 डब्ल्यूपीएफ ऐप - एमवीवीएम, रिपोजिटरीज और वर्क पैटर्न के यूनिट के साथ समाधान आर्किटेक्चर
- 10. मैं कभी भी उम्मीद का उपयोग क्यों करूंगा() Qunit के साथ टेस्ट लिखते समय?
- 11. नोड.जेएस: क्या मैं वाउज़ या एक्सप्रेसो या नोड यूनिट या ज़ोंबी.जेएस या सभी का उपयोग करूंगा?
- 12. क्या मैं परिभाषित पर स्थिरांक पसंद करूंगा?
- 13. शीर्ष मानक नियंत्रक (यूनिट टेस्ट)
- 14. मैं कभी भी बिटमैप फैक्ट्री के इनपर्ज करने योग्य विकल्प का उपयोग क्यों नहीं करूंगा?
- 15. क्या मैं गार्ड क्लॉज का उपयोग करूंगा, और अन्य खंड से बचने की कोशिश करूंगा?
- 16. निर्मित "एचटीएमएल/टेम्पलेट" या "मूंछें", मैं किस का उपयोग करूंगा?
- 17. मल्टीथ्रेडिंग: मैं एक जॉइन का उपयोग कब करूंगा?
- 18. आईओएस पर यूडीपी सॉकेट के प्रबंधन के लिए मैं किस उच्च स्तरीय एपीआई का उपयोग करूंगा?
- 19. लिनक्स वर्क कतार का उपयोग कैसे करें
- 20. यूनिट टेस्ट सत्र विंडो
- 21. राज्यव्यापी सत्र बीन्स का उपयोग क्यों करें?
- 22. डाटाबेस लेनदेन के साथ कार्य पैटर्न का यूनिट
- 23. NHBernate DateTime SqlDateTime ओवरफ़्लो
- 24. मैं एक खोज करने और फ़ाइल पर प्रतिस्थापित करने के लिए क्या जीएनयू/लिनक्स कमांड लाइन उपकरण का उपयोग करूंगा?
- 25. मुझे एएसपी.NET एमवीसी 3 एप्लिकेशन में वर्क इंस्टेंस का यूनिट कहां बनाना चाहिए?
- 26. फेकाडे पैटर्न का उपयोग
- 27. यदि मैं संग्रहीत प्रक्रियाओं का उपयोग कर रहा हूं तो क्या मैं एक ओआरएम का उपयोग करूंगा?
- 28. सत्र बनाम सिंगलटन पैटर्न
- 29. यूनिट परीक्षण विज़िटर पैटर्न आर्किटेक्चर
- 30. ट्विस्ट, गीवेंट इवेंटलेट - मैं उनका उपयोग कब करूंगा
शेनके, मेरे पास एक समान सवाल है, और ऐसा लगता है जैसे आपने एक यूनिट ऑफ वर्क बनाया है जो मेरी आवश्यकताओं को मेरी तुलना में बेहतर बनाता है। क्या आप मेरे प्रश्न पर नजर डालें और अपना $ 0.02 पेश कर सकते हैं? http://stackoverflow.com/questions/2604762/using-unit-of-work-design-pattern-nhibernate-sessions-in-an-mvvm-wpf – Echiban