मुझे आश्चर्य है कि क्या मुझे जावा बीन्स के बारे में कुछ याद आ रहा है। मुझे अपनी ऑब्जेक्ट्स को जितना संभव हो सके कन्स्ट्रक्टर में उतना ही प्रारंभ करना पसंद है और कम से कम म्यूटेटर हैं। बीन्स सीधे इसके खिलाफ जाते हैं और आम तौर पर घबराहट महसूस करते हैं। बीन्स के रूप में मेरी वस्तुओं को नहीं बनाकर मैं किस क्षमताओं को याद कर रहा हूं?जावा बीन्स: मुझे क्या याद आ रही है?
उत्तर
ऐसा लगता है जैसे आप सही रास्ते पर हैं। यह आप नहीं हैं जो जावा बीन्स के बिंदु को याद कर रहे हैं, यह अन्य प्रोग्रामर हैं जो उनका दुरुपयोग कर रहे हैं।
जावा बीन्स विनिर्देश को विज़ुअल टूल के साथ उपयोग करने के लिए डिज़ाइन किया गया था। विचार यह था कि एक एप्लिकेशन डिज़ाइनर ऑब्जेक्ट का एक उदाहरण इंटरैक्टिव रूप से कॉन्फ़िगर करने में सक्षम होगा, फिर कॉन्फ़िगर (या कोड के लिए कोड जेनरेट) कॉन्फ़िगर करें, ताकि इसे रनटाइम पर पुनर्निर्मित किया जा सके; इरादा यह था कि इसे रनटाइम पर उत्परिवर्तित नहीं किया जाएगा।
दुर्भाग्यवश, बहुत से डेवलपर्स accessors violate encapsulation को समझ में नहीं आते हैं।वे वस्तुओं के बजाय structs का उपयोग करें। उन्हें किसी वर्ग के डेटा सदस्यों पर निर्भरता रखने वाले अन्य वर्गों, यहां तक कि अन्य पैकेजों के साथ कुछ भी गलत नहीं दिखता है।
बेशक, आपको सामान्य रूप से अपनी वस्तुओं के उदाहरणों को कॉन्फ़िगर करने की आवश्यकता होगी। यह सिर्फ इतना है कि यह किसी प्रकार की कॉन्फ़िगरेशन सुविधा के माध्यम से किया जाना चाहिए। यह एक निर्भरता इंजेक्शन कंटेनर, एक "बीनबॉक्स" शैली दृश्य उपकरण हो सकता है, या बस हाथ से लिखा गया JSON, XML, या गुण फ़ाइलों को पढ़ सकता है। कुंजी यह है कि रनटाइम पर ये वस्तुएं प्रभावी रूप से अपरिवर्तनीय होती हैं; ग्राहक सिर्फ अपने परिचालन का आह्वान करते हैं, वे अपनी संपत्तियों तक नहीं पहुंचते हैं।
बीन्स इस तरह से कॉन्फ़िगर किए गए हैं ताकि स्वचालित उपकरण बीन्स बना और संशोधित कर सकें। वे जरूरी नहीं कि वे महान डिजाइन पैटर्न हों।
इन उपकरणों के उदाहरण:
निश्चित रूप से। क्या स्वचालित उपकरण (serialization के अलावा) का उपयोग करने के लायक हैं? उदाहरण? धन्यवाद! –
ईमानदारी से .... मुझे कोई जानकारी नहीं है। – jjnguy
एक अच्छा उदाहरण हाइबरनेट होगा, इसे गुणों और सेटर्स की आवश्यकता होती है ताकि संपत्तियों को जारी रखा जा सके। –
मैं अपने वस्तुओं संभव के रूप में निर्माता में के रूप में ज्यादा प्रारंभ करते हैं और mutators की एक न्यूनतम संख्या के लिए पसंद करते हैं।
अपरिवर्तनीय वस्तुओं का पक्ष एक बुद्धिमान विकल्प है। हालांकि सेम का लाभ यह है कि ढांचे/उपकरण/पुस्तकालय एक विशेष इंटरफ़ेस को लागू करने के लिए बिना किसी कक्षा के गुणों को रनटाइम पर निर्धारित कर सकते हैं।
उदाहरण के लिए, मान लें कि आपके व्यक्ति सेम का एक संग्रह है, और प्रत्येक सेम जैसे नाम, उम्र, ऊंचाई, आदि के रूप में गुण है
आप नाम से सेम के इस संग्रह सॉर्ट कर सकते हैं (उदाहरण के लिए) का उपयोग निम्नलिखित कोड:
Collection<Person> myCollection = // initialise and populate the collection
Comparator nameCompare = new BeanComparator("name");
Collections.sort(myCollection, nameCompare);
BeanComparator वर्ग जानता है कि कैसे प्रत्येक वस्तु से "नाम" संपत्ति को निकालने के लिए, क्योंकि जावा बीन्स का पालन किया है, तो आप बख्शा रहे हैं अर्थात जैसे एक अंतरफलक को लागू करने की "भूमि के ऊपर":
interface Nameable {
public String getName();
public void setName(String name);
}
स्प्रिंग एमवीसी का एक और उदाहरण एक बीन है जो अनुरोध यूआरएल पैरामीटर स्टोर करता है। यह इस तरह एक वेब नियंत्रक (के रूप में Struts में एक 'एक्शन' कहा जाता है) में परिभाषित किया जा सकता है:
public ModelAndView searchUsers(UserSearchCriteria criteria) {
// implementation omitted
}
क्योंकि UserSearchCriteria, एक JavaBean होने के लिए करता है, तो अनुरोध URL एक पैरामीटर जैसे maxItems=6
शामिल होने की उम्मीद है, स्प्रिंग ढांचा 'जानता है' कि यह हस्ताक्षर
void setMaxItems(int maxItems);
संक्षेप में के साथ एक विधि फोन करना चाहिए, JavaBeans (आमतौर पर एक उपकरण या रूपरेखा के द्वारा) बस एक साधारण सम्मेलन जो एक वर्ग के गुणों कार्यावधि में गतिशील रूप से खोज की जा करने की अनुमति देता है , जब प्राथमिकता को जानना असुविधाजनक/असंभव होता है जो गुण प्रदान किए जा सकते हैं।
बीनकंपेटरेटर बुरा है। प्रतिबिंब डिजाइन-समय और ढांचे के लिए है, न कि एक प्रकार के लूप के दिल के लिए। – erickson
जब आप "बीन" शब्द को किसी प्रकार के "कंटेनर" को देखने की उम्मीद करते हैं। किसी भी प्रकार के जावाबीन का विचार उन घटकों के लिए एक समान इंटरफ़ेस सम्मेलन प्रदान करना है जिन्हें रन टाइम पर जोड़ा और छेड़छाड़ की जा सकती है। सादा जावाबीन्स इसका सबसे सरल उदाहरण है: यह सभी इंटरफ़ेस संभावनाएं प्रस्तुत करता है और सीरियलज़ेबल है, जिसका अर्थ है कि आप बीन के उदाहरण बना सकते हैं, उन्हें संशोधित कर सकते हैं, उन्हें सहेज सकते हैं, और उन्हें पुनः लोड कर सकते हैं।
लंबे और बहुत पहले, मैं एक जावा संपादक लिखता हूं जिसमें टेक्स्ट स्ट्रिंग का प्रतिनिधित्व करने वाला एक सरल "डेटा बेस" होता है, और इसमें "आर्किटेक्चर प्लग" होता है जो बीन्स का उपयोग करता है। आप एक बीन स्टोरेज बिन से बीन खींचकर और संपादक पर छोड़कर संपादक को व्यवहार जोड़ सकते हैं; एक बार ऐसा करने के बाद, व्यवहार (कहें, कर्सर पर वर्णों को स्थानांतरित करने के लिए सीएनटीएल-टी) संपादक में स्वचालित रूप से उपलब्ध था। बीन्स के पास एक ज्ञात इंटरफ़ेस था - वे जानते थे कि कंटेनर को इसकी डेटा संरचना के लिए कैसे पूछना है, और एक doSomething() विधि --- और कंटेनर को क्लास फ़ाइल को गतिशील रूप से लोड करना, ऑब्जेक्ट को तुरंत चालू करना और इसकी पहुंच सेट करना था डेटाबेस।
वैसे, यह वास्तव में सच नहीं है कि एक्सेसर्स encapsulation का उल्लंघन करते हैं; हालांकि यह सच है कि सिर्फ इसलिए कि आपके पास सदस्य है, इसलिए को की आवश्यकता नहीं है ताकि इसके लिए विधियां सेट कर सकें। JavaBean spec इस पर थोड़ा अस्पष्ट है; बिंदु उन चीजों के लिए गेटर्स और सेटर्स प्रदान करना है जिन्हें वस्तुओं "अनुबंध" में होना आवश्यक है।
आत्मनिरीक्षण और प्रतिबिंब भाषा में जोड़ा गया और वास्तव में समझने के बाद, उन सम्मेलनों की आवश्यकता कुछ हद तक कम हो गई; प्रारंभिक जावा में, आपको विधियों को खोजने के लिए एक सम्मेलन की आवश्यकता थी।
मैं इस विचार को साझा करता हूं कि उत्परिवर्तन को कम करना एक अच्छी बात है। जैसा कि पहले से ही बताया गया है, जावाबीन का लाभ यह है कि ढांचे द्वारा उन्हें संभालना आसान है।
"दोनों दुनिया" का सर्वश्रेष्ठ पाने के लिए, मुझे लगता है कि Builder pattern का उपयोग करने के लिए एक अच्छा विकल्प है, बिल्डर को जावाबीन मानक का अनुपालन करने के लिए थोड़ा संशोधित करना। इसलिए, यदि आपको एक फ्रेमवर्क कार्यक्षमता की आवश्यकता है जिसके लिए आपकी कक्षा जावाबीन मानक का अनुपालन करती है, तो आप बिल्डर को वास्तविक वर्ग के बजाय उपयोग कर सकते हैं।
- 1. एंड्रॉइड वेबव्यू प्रदर्शन, मुझे क्या याद आ रही है?
- 2. पायथन: क्या मुझे कुछ याद आ रही है?
- 3. XMLHttpRequest में मुझे क्या याद आ रही है?
- 4. NUnit Assert.Equals मुझे क्या याद आ रही है?
- 5. बिट झंडे - मुझे क्या याद आ रही है?
- 6. UIAplplicationExitsOnSpend कुछ और मुझे याद आ रही है?
- 7. मुझे क्या याद आ रही है: कई तर्कों के साथ कार्य रचना संभव है?
- 8. जीसी, मुझे क्या याद आ रही है? (मेरे प्रतिनिधि को एकत्र नहीं किया गया है)
- 9. मैं वर्षों से "वर्ग" के बिना PHP लिख रहा हूं ... मुझे क्या याद आ रही है?
- 10. क्या मुझे रत्नों के लिए ri और rdoc इंस्टॉल नहीं करके कुछ याद आ रही है?
- 11. भविष्यवाणी की इस श्रृंखला में मुझे क्या याद आ रही है?
- 12. पायथन, यूनिकोडेडाटा नाम, और कोडपॉइंट मान, मुझे क्या याद आ रही है?
- 13. एक्सकोड 4.3 में सी ++ अपवाद ब्रेकपॉइंट्स के बारे में मुझे क्या याद आ रही है?
- 14. क्रॉस-ओरिजिनल रिसोर्स शेयरिंग (सीओआरएस) - क्या मुझे यहां कुछ याद आ रही है?
- 15. AJAX JSON लौटने के लिए - मुझे क्या याद आ रही है?
- 16. मौलिक डेटा संरचनाओं की सूची - मुझे क्या याद आ रही है?
- 17. System.Web.Http.Description याद आ रही है जोड़े से संदर्भ सूची
- 18. को तोड़ने और लेबल, "लेबल mylabel याद आ रही है"
- 19. Exception.Data जानकारी EntLib लॉग में याद आ रही है
- 20. ARM6 अपने निर्माण में याद आ रही है सेटिंग
- 21. afxwin.h फ़ाइल कुलपति ++ एक्सप्रेस में याद आ रही है संस्करण
- 22. Django ManagementForm डेटा याद आ रही है या
- 23. सरल स्कैला वाक्यविन्यास - "==" ऑपरेटर को परिभाषित करने की कोशिश कर रहा है - मुझे क्या याद आ रही है?
- 24. क्या कोई मॉड्यूल है जो मुझे बेहतर कोड लिखने में मदद करने के लिए याद आ रही है?
- 25. अगर मैं रीशेर्पर 5 की इंटेलिसेन्स बंद कर देता हूं, तो मुझे क्या याद आ रही है?
- 26. मेरी एएसपी.NET 2.0 साइट को एएसपी.NET 3.5 में नहीं ले जाकर मुझे क्या याद आ रही है?
- 27. क्या PHP बंद हो गए हैं या क्या मुझे कुछ याद आ रहा है?
- 28. प्रबंधन रूप त्रुटि ('ManagementForm डेटा याद आ रही है या के साथ छेड़छाड़ की गई है')
- 29. कार्यक्रम शुरू नहीं कर सकते क्योंकि cygwin1.dll याद आ रही है ... ग्रहण CDT में
- 30. टैबलेट 'टैबब्लिक्स 1' अमान्य है। DataSetName संपत्ति के लिए मूल्य याद आ रही है -
होलब encapsulation की परिभाषा का पालन करता है जिसे मैं "डेटा छिपाने" कहता हूं। मैं "डेटा सुरक्षा" पसंद करता हूं।गेम यह जानने के बारे में है कि आपका डेटा कब और कैसे बदला जाता है। जब तक डेटा निजी है, तब तक आप परिवर्तनों के नियंत्रण में हैं। उस बिंदु पर, क्या मायने रखता है कि आप इसे अपरिवर्तनीय चाहते हैं या नहीं। –
प्रकारों के बीच युग्मन को कम करने से कोड पठनीयता और रखरखाव बहुत आसान हो जाता है। होलब और मेरे अपने अचूक अनुभव जैसे अधिकारियों ने मुझे सिखाया है कि वस्तु गुणों पर बाह्य निर्भरता अनावश्यक जटिलता का लक्षण हैं। आमतौर पर एक आसान, क्लीनर विकल्प होता है। – erickson