2008-09-18 10 views
11

मुझे डेस्कटॉप एप्लिकेशन में अपने सत्र को प्रबंधित करना अधिक कठिन लगता है, क्योंकि आप HttpContext जैसे स्पष्ट बंधन का लाभ नहीं उठा सकते हैं। तो आलसी लोडिंग का लाभ उठाने के लिए आप अपने सत्र के जीवनकाल का प्रबंधन कैसे करते हैं लेकिन पूरे एप्लिकेशन के लिए एक सत्र खुला नहीं है?डेस्कटॉप अनुप्रयोगों में NHibernate के लिए आपकी सत्र प्रबंधन रणनीति क्या है?

उत्तर

3

मुझे लगता है कि यह आपकी वस्तुओं के डिजाइन के लिए उबलता है। चूंकि प्रति-ऑब्जेक्ट स्तर में आलसी लोडिंग लागू की जा सकती है, इसलिए जब आप सत्र प्रबंधन के बारे में सोचते हैं तो आप उस तथ्य का लाभ उठा सकते हैं।

उदाहरण के लिए, मेरे पास ऑब्जेक्ट्स का एक समूह है जो डेटा समृद्ध और आलसी लोड होता है, और मेरे पास एक ग्रिड/सारांश दृश्य है, और उनके लिए विवरण देखें। ग्रिड-सारांश दृश्य में, मैं ऑब्जेक्ट के आलसी-लोड संस्करण का उपयोग नहीं करता हूं। मैं उस डेटा को प्रस्तुत करने के लिए एक सरोगेट ऑब्जेक्ट का उपयोग करता हूं, और वह सरोगेट ऑब्जेक्ट आलसी लोड नहीं होता है।

दूसरी तरफ, उपयोगकर्ता एक बार देखने/संपादित करने के लिए उस रिकॉर्ड का चयन करता है, और आप ऑब्जेक्ट के बहु-पेज किए गए विवरण दृश्य दर्ज करते हैं, तब जब हम विशिष्ट ऑब्जेक्ट पर आलसी लोडिंग लागू करते हैं। डेटा अब आलसी लोड हो गया है, इस पर निर्भर करता है कि कौन से विवरण केवल मांग पर देखे जाते हैं। इस तरह, आलसी लोडिंग के लिए मेरे सत्र का खुलासा केवल तब तक रहता है जब तक विवरण दृश्य का उपयोग किया जा रहा हो।

2

जैसा कि आपने पहले कहा था, आप HttpRequest की सीमा का उपयोग नहीं कर सकते हैं, लेकिन आप समझ सकते हैं कि आपके डेस्कटॉप एप्लिकेशन में "HttpRequest" क्या है।

मुझे समझाएं। आमतौर पर आपका HttpRequest एक क्रिया के लिए नियंत्रक होगा और आप उस सत्र को अपने विशिष्ट कार्यवाही तक सीमित कर देंगे। अब आपके डेस्कटॉप एप्लिकेशन में "नियंत्रक" (घटनाएं) छोटी हो सकती हैं, लेकिन जैसा कि @ जोन ने कहा, एक खिड़की आसानी से सीमा का प्रतिनिधित्व कर सकती है: आप वहां चीजों के साथ काम करते हैं, उन्हें अपने सत्र में रहने दें।

0

शायद हम एक कमांड पैटर्न सेट अप के बारे में सोच सकते हैं। प्रत्येक महत्वपूर्ण घटना एक कमांड को खिलाएगी और ट्रिगर करेगी, और इसे निष्पादित करेगी। बेस AbstractCommand.Execute() कार्यान्वयन सत्र को प्रारंभ करने, लेनदेन को लपेटने, कंक्रीट को कॉल करने के प्रभारी कुछCommand._Execute() कार्यान्वयन और सभी सामान बंद करने का प्रभारी है।

वैसे भी, यह दृढ़ता से अज्ञेय होने से बहुत दूर है, क्योंकि यह तब होना चाहिए जब मैंने अपना ऑब्जेक्ट लोड किया हो और मैं केवल सादा उदाहरणों के साथ सौदा करना चाहता हूं (मैं विशेष रूप से आलसी लोड का जिक्र कर रहा हूं)।

क्या यह किसी अन्य प्रकार के ऑटो-ओपन/ऑटो-क्लोज़ व्यवहार को लागू करना संभव है? यह उच्च परतों द्वारा प्रश्नों के लिए जरूरी दृढ़ता परत को संवेदनशील बनाकर पूरा किया जाना चाहिए, यहां तक ​​कि आलसी लोड ट्रिगर्स जैसे निहित मामलों में भी। कनेक्शन को बंद करने के लिए, दृढ़ता परत डीबी निष्क्रियता के दिए गए टाइमआउट (10 सेकंड?) के बाद बंद हो सकती है। मुझे पता है, यह तेज नहीं है। लेकिन यह वास्तव में उच्च परतों दृढ़ता अज्ञेयवादी बना देगा।

धन्यवाद, मार्सेलो

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