2011-01-06 6 views
7

मैं अपनी वेबसाइट के उपयोगकर्ताओं के बारे में जानकारी संग्रहीत करने के लिए डेटाबेस बना रहा हूं (मैं stuts2 और इसलिए जावा ईई तकनीक का उपयोग कर रहा हूं)। डेटाबेस के लिए मैं एक डीबीमेनगर बनाउंगा। क्या मुझे यहां सिंगलटन पैटर्न लागू करना चाहिए या इसके सभी तरीकों को स्थैतिक बनाना चाहिए?सभी स्थैतिक तरीकों और सिंगलटन पैटर्न को लागू करने के बीच क्या अंतर है?

मैं उपयोगकर्ता प्रोफाइल को जोड़ने, हटाने और अपडेट करने जैसी मूलभूत चीज़ों के लिए इस डीबीमेनगर का उपयोग करूँगा। इसके साथ-साथ, मैं अन्य सभी पूछताछ उद्देश्यों के लिए उपयोग करूंगा, उदाहरण के लिए यह पता लगाने के लिए कि कोई उपयोगकर्ता नाम पहले से मौजूद है या नहीं और सभी उपयोगकर्ताओं को प्रशासनिक उद्देश्यों और उस तरह की सामग्री के लिए प्राप्त करना है।

मेरे सवालों का

  • सिंगलटन पैटर्न के क्या लाभ है?
  • कौन सी बात सबसे उपयुक्त है? सभी स्थिर तरीकों या एक सिंगलटन पैटर्न?
  • कृपया दोनों की तुलना करें।

संबंध

shahensha

पी.एस. डेटाबेस इससे बड़ा है। यहां मैं केवल उन टेबलों के बारे में बात कर रहा हूं जिनका उपयोग मैं उपयोगकर्ता जानकारी संग्रहीत करने के लिए करूँगा।

उत्तर

8

मैं यहाँ या बल्कि सिंगलटन पैटर्न लागू करना चाहिए अपने सभी तरीकों स्थिर बनाने के?

दोनों में से कोई नहीं। Just create one

एक साधारण सर्वलेट कंटेनर में, आप इसके लिए ServletContextListener का उपयोग कर सकते हैं। वेबएप के स्टार्टअप के दौरान, एक बनाएं और इसे एप्लिकेशन स्कोप में ServletContext#setAttribute() पर रखें। यह वेबपैप के जीवनकाल के दौरान सभी सर्वलेट्स के लिए उपलब्ध होगा। मूल किकऑफ उदाहरण के लिए, आपको this article उपयोगी मिल सकता है।

1

मुझे ईई के आंतरिक पता नहीं है, लेकिन आम तौर पर स्थैतिक वर्ग और सिंगलटन के बीच का अंतर तत्काल है - स्थैतिक वर्ग के साथ, कोई वास्तविक तत्कालता नहीं है, कोई सदस्य डेटा नहीं है, किसी ऑब्जेक्ट का कोई संदर्भ नहीं है। तो व्यावहारिक अंतर है ... ज्यादा नहीं।

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

यह UserProfile.Update (उपयोगकर्ता नाम, पासवर्ड, firstName ...) कहने के लिए मुझे और अधिक समझ में आता है। आप कह रहे हैं "इस विशेष सेट डेटा पर UserProfile की अमूर्त अवधारणा से कार्य अद्यतन करें"।

ध्यान रखें कि शब्द सार का मेरा उपयोग सख्ती से दिखने वाला है, न कि शब्द के कंप्यूटर विज्ञान अर्थ में।

1

बहुत व्यावहारिक अंतर नहीं है, लेकिन कुछ दार्शनिक अंतर है।

मैं यहां सिंगलटन दृष्टिकोण की अनुशंसा करता हूं - आप वास्तव में उच्च स्तर पर डेटा एक्सेस ऑब्जेक्ट (डीएओ) का एक प्रकार का वर्णन कर रहे हैं।

पर कुछ विचार क्यों:

  • एक फैक्टरी शैली DBManager ही (जैसे कि, DBManagerFactory) के निर्माण को आसान परीक्षण इकाई बनाना होगा करने के लिए दृष्टिकोण; यह खुद को निर्भरता इंजेक्शन मॉडल में उधार देता है।

  • स्थिर विधियों के समूह के साथ एक वर्ग आमतौर पर एक स्विचब्लैड/उपयोगिता प्रकार के वर्ग के रूप में माना जाता है जिसमें कोई ओवर-आर्काइंग थीम नहीं है (यानी, विधियों के बीच आजादी)। StringUtils जैसी कक्षा के बारे में सोचें - लोग मानते हैं कि कक्षा में कोई सामान्य स्थिति नहीं है।

  • "सभी स्थैतिक तरीकों" दृष्टिकोण के साथ, एक क्रॉस स्तर पर, आप अपने लिए बहुत सारे काम कर रहे हैं जिसमें आपको प्रत्येक विधि के लिए टाइपिंग स्थिर रखना होगा। दोबारा, आप सिर्फ एक डीबीएमनेगर फैक्ट्री कर सकते हैं जिसमें डीबीएमनेगर बनाने के लिए केवल एक स्थिर विधि है, जो सिंगलटन होने के समाप्त होता है।

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