कुछ ऐसे ही सवाल देखे हैं:
- JavaBean और POJO में क्या अंतर है?
- POJO (Plain Old Java Object) और DTO (Data Transfer Object) में क्या अंतर है?
क्या आप कृपया मुझे उन संदर्भों को भी बता सकते हैं जिनमें उनका उपयोग किया गया है? या उन का उद्देश्य?
कुछ ऐसे ही सवाल देखे हैं:
क्या आप कृपया मुझे उन संदर्भों को भी बता सकते हैं जिनमें उनका उपयोग किया गया है? या उन का उद्देश्य?
जवाबों:
एक जावाबीन एक वर्ग है जो सूर्य द्वारा परिभाषित JavaBeans सम्मेलनों का अनुसरण करता है। विकिपीडिया के जावाबीन क्या हैं, इसका एक बहुत अच्छा सारांश है :
JavaBeans जावा के लिए पुन: प्रयोज्य सॉफ्टवेयर घटक हैं जिन्हें एक बिल्डर टूल में नेत्रहीन रूप से हेरफेर किया जा सकता है। व्यावहारिक रूप से, वे एक विशेष सम्मेलन के अनुरूप जावा प्रोग्रामिंग भाषा में लिखी गई कक्षाएं हैं। उनका उपयोग कई वस्तुओं को एक ही वस्तु (बीन) में घेरने के लिए किया जाता है, ताकि उन्हें कई व्यक्तिगत वस्तुओं के बजाय एक ही बीन ऑब्जेक्ट के रूप में पास किया जा सके। एक जावाबैन एक जावा ऑब्जेक्ट है जो धारावाहिक है, एक अशक्त कंस्ट्रक्टर है, और गेट्टर और सेटलेट विधियों का उपयोग करके गुणों तक पहुंचने की अनुमति देता है।
JavaBean क्लास के रूप में कार्य करने के लिए, ऑब्जेक्ट नामकरण, निर्माण, और व्यवहार के बारे में एक ऑब्जेक्ट क्लास को कुछ सम्मेलनों का पालन करना चाहिए। ये कन्वेंशनों में ऐसे उपकरण होना संभव है जो JavaBeans का उपयोग, पुन: उपयोग, प्रतिस्थापित और कनेक्ट कर सकते हैं।
आवश्यक सम्मेलन हैं:
- कक्षा में एक सार्वजनिक डिफ़ॉल्ट निर्माता होना चाहिए। यह संपादन और सक्रियण ढांचे के भीतर आसान तात्कालिकता की अनुमति देता है।
- एक मानक नामकरण सम्मलेन के बाद, क्लास सेट, और अन्य तरीकों (तथाकथित एक्सेसर विधियों और म्यूटेटर विधियों) का उपयोग करके वर्ग के गुणों को सुलभ होना चाहिए। यह आसान स्वचालित निरीक्षण और रूपरेखाओं के भीतर बीन राज्य के अद्यतन की अनुमति देता है, जिनमें से कई विभिन्न प्रकार के गुणों के लिए कस्टम संपादकों में शामिल हैं।
- वर्ग क्रमबद्ध होना चाहिए। यह अनुप्रयोगों और रूपरेखाओं को मज़बूती से सहेजने, संग्रहीत करने, और सेम की अवस्था को एक ऐसे फैशन में पुनर्स्थापित करने की अनुमति देता है जो वीएम और प्लेटफ़ॉर्म से स्वतंत्र है।
क्योंकि इन आवश्यकताओं को बड़े पैमाने पर इंटरफेस को लागू करने के बजाय सम्मेलनों के रूप में व्यक्त किया जाता है, कुछ डेवलपर्स JavaBeans को प्लेन ओल्ड जावा ऑब्जेक्ट के रूप में देखते हैं जो विशिष्ट नामकरण सम्मेलनों का पालन करते हैं।
प्लेन ओल्ड जावा ऑब्जेक्ट या पीओजेओ एक शब्द है जिसे शुरू में एक साधारण हल्के जावा ऑब्जेक्ट को नामित करने के लिए पेश किया गया है, किसी भी javax.ejb
इंटरफ़ेस को लागू नहीं करते हुए , हेवीवेट ईजेबी 2.x (विशेष रूप से एंटिटी बीन्स, स्टेटलेस सेशन बीन्स जो कि खराब ओओ नहीं हैं) के विपरीत है। आज, यह शब्द बिना किसी अतिरिक्त सामान के किसी भी साधारण वस्तु के लिए उपयोग किया जाता है। फिर, विकिपीडिया POJO को परिभाषित करने में एक अच्छा काम करता है :
POJO प्लेन ओल्ड जावा ऑब्जेक्ट के लिए एक परिचित करा रहा है। नाम का उपयोग इस बात पर जोर देने के लिए किया जाता है कि प्रश्न में ऑब्जेक्ट एक सामान्य जावा ऑब्जेक्ट है, विशेष वस्तु नहीं है, और विशेष रूप से एंटरप्राइज जावाबीन नहीं है (विशेषकर ईजेबी 3 से पहले)। सितंबर 2000 में यह शब्द मार्टिन फाउलर, रेबेका पार्सन्स और जोश मैकेंजी द्वारा बनाया गया था:
"हमने सोचा कि लोग अपने सिस्टम में नियमित वस्तुओं का उपयोग करने के खिलाफ क्यों थे और यह निष्कर्ष निकाला कि यह सरल वस्तुओं में एक फैंसी नाम की कमी थी। इसलिए हमने उन्हें एक दिया, और यह बहुत अच्छी तरह से पकड़ा गया।"
यह शब्द उन तकनीकों के लिए पुराने शब्दों का पैटर्न जारी रखता है, जो टेलीफोनी में POTS (सादा पुरानी टेलीफोन सेवा) जैसे फैंसी नई सुविधाओं का उपयोग नहीं करते हैं, और PODS (सादा पुरानी डेटा संरचनाएं) जो C ++ में परिभाषित हैं, लेकिन केवल C2 सुविधाओं का उपयोग करते हैं और POD में POD (सादा पुराना दस्तावेज)।
इस शब्द को व्यापक रूप से व्यापक स्वीकृति मिली है क्योंकि एक सामान्य और आसानी से समझे जाने वाले शब्द की आवश्यकता है जो जटिल ऑब्जेक्ट फ्रेमवर्क के विपरीत है। JavaBean एक POJO है जो क्रमबद्ध है, जिसमें एक नो-तर्क निर्माता है, और गेट्टर और सेटर विधियों का उपयोग करके गुणों तक पहुंचने की अनुमति देता है। एंटरप्राइज जावाबीन एक एकल वर्ग नहीं है, लेकिन एक संपूर्ण घटक मॉडल (फिर से, ईजेबी 3 एंटरप्राइज जावाबीन्स की जटिलता को कम करता है)।
जैसा कि पीओजेओ का उपयोग करने वाले डिजाइन अधिक सामान्यतः उपयोग किए गए हैं, सिस्टम उत्पन्न हुए हैं जो पीओजेओ को फ्रेमवर्क में उपयोग की जाने वाली कुछ कार्यक्षमता और अधिक पसंद के बारे में बता रहे हैं कि वास्तव में कार्यक्षमता के किन क्षेत्रों की आवश्यकता है। हाइबरनेट और स्प्रिंग इसके उदाहरण हैं।
एक वैल्यू ऑब्जेक्ट या VO एक ऑब्जेक्ट है जैसे java.lang.Integer
कि होल्ड वैल्यू (इसलिए ऑब्जेक्ट ऑब्जेक्ट)। एक अधिक औपचारिक परिभाषा के लिए, मैं अक्सर मार्टिन फाउलर के मूल्य वस्तु के विवरण का संदर्भ देता हूं :
एंटरप्राइज एप्लीकेशन आर्किटेक्चर के पैटर्न में मैंने वैल्यू ऑब्जेक्ट को एक छोटी वस्तु जैसे मनी या डेट रेंज ऑब्जेक्ट के रूप में वर्णित किया है। उनकी प्रमुख संपत्ति यह है कि वे संदर्भ शब्दार्थ के बजाय मूल्य शब्दार्थ का अनुसरण करते हैं।
आप आमतौर पर उन्हें बता सकते हैं क्योंकि उनकी समानता की धारणा पहचान पर आधारित नहीं है, इसके बजाय दो मूल्य ऑब्जेक्ट समान हैं यदि उनके सभी फ़ील्ड समान हैं। हालाँकि सभी फ़ील्ड समान हैं, लेकिन यदि कोई सबसेट अद्वितीय है - तो आपको सभी फ़ील्ड्स की तुलना करने की आवश्यकता नहीं है - उदाहरण के लिए मुद्रा ऑब्जेक्ट्स के लिए मुद्रा कोड, शुद्धता का परीक्षण करने के लिए पर्याप्त हैं।
एक सामान्य अनुमान यह है कि मूल्य वस्तुओं को पूरी तरह से अपरिवर्तनीय होना चाहिए। यदि आप एक वैल्यू ऑब्जेक्ट को बदलना चाहते हैं, तो आपको ऑब्जेक्ट को एक नए के साथ बदलना चाहिए और वैल्यू ऑब्जेक्ट के मूल्यों को अपडेट करने की अनुमति नहीं दी जानी चाहिए - अपग्रेड करने योग्य वैल्यू ऑब्जेक्ट एलियासिंग समस्याओं की ओर ले जाते हैं।
प्रारंभिक J2EE साहित्य ने एक अलग धारणा का वर्णन करने के लिए शब्द मूल्य वस्तु का उपयोग किया, जिसे मैं डेटा ट्रांसफर ऑब्जेक्ट कहता हूं । उन्होंने तब से अपना उपयोग बदल दिया है और इसके बजाय ट्रांसफर ऑब्जेक्ट शब्द का उपयोग करते हैं ।
आप विकी पर और डिर्क रिहले द्वारा मूल्य वस्तुओं पर कुछ और अच्छी सामग्री पा सकते हैं ।
डेटा ट्रांसफर ऑब्जेक्ट या डीटीओ, ईजेबी के साथ पेश किया गया एक (एंटी) पैटर्न है। EJBs पर कई दूरस्थ कॉल करने के बजाय, विचार एक ऑब्जेक्ट ऑब्जेक्ट में डेटा को एनकैप्सुलेट करना था जिसे नेटवर्क पर स्थानांतरित किया जा सकता है: एक डेटा ट्रांसफर ऑब्जेक्ट। विकिपीडिया में डेटा ट्रांसफर ऑब्जेक्ट की एक अच्छी परिभाषा है :
डेटा ट्रांसफर ऑब्जेक्ट (DTO), जिसे पहले मूल्य ऑब्जेक्ट या VO के रूप में जाना जाता है, एक डिज़ाइन पैटर्न है जिसका उपयोग सॉफ़्टवेयर एप्लिकेशन सबसिस्टम के बीच डेटा स्थानांतरित करने के लिए किया जाता है। डीटीओ को अक्सर डेटाबेस से डेटा प्राप्त करने के लिए डेटा एक्सेस ऑब्जेक्ट के साथ संयोजन में उपयोग किया जाता है।
डेटा ट्रांसफर ऑब्जेक्ट और व्यावसायिक ऑब्जेक्ट या डेटा एक्सेस ऑब्जेक्ट के बीच अंतर यह है कि एक डीटीओ के पास अपने स्वयं के डेटा (एक्सेसर्स और म्यूटेटर्स) के भंडारण और पुनर्प्राप्ति के अलावा कोई व्यवहार नहीं है।
एक पारंपरिक ईजेबी वास्तुकला में, डीटीओ दोहरे उद्देश्यों की सेवा करते हैं: सबसे पहले, वे इस समस्या के आसपास काम करते हैं कि इकाई बीन्स क्रमबद्ध नहीं हैं; दूसरा, वे स्पष्ट रूप से एक विधानसभा चरण को परिभाषित करते हैं, जहां दृश्य द्वारा उपयोग किए जाने वाले सभी डेटा को प्रचलित किया जाता है और प्रस्तुति स्तरीय पर नियंत्रण वापस करने से पहले डीटीओ में डाल दिया जाता है।
तो, कई लोगों के लिए, डीटीओ और वीओ एक ही चीज हैं (लेकिन फाउलर वीओ का उपयोग कुछ और मतलब है जैसा हमने देखा)। ज्यादातर समय, वे JavaBeans सम्मेलनों का पालन करते हैं और इस प्रकार JavaBeans भी हैं। और सभी POJO हैं।
class SomeClass { public String foo;public String bar; }
एक वर्ग के अंदर एक जटिल तर्क के साथ, यह सुनिश्चित करने के लिए कि यह जावाबीन नहीं है, यह एक वीओ नहीं हो सकता है क्योंकि यह परिवर्तनशील है, क्या यह एक हो सकता है डीटीओ? यह किसी भी प्रकार के दूरस्थ आह्वान के लिए लक्षित नहीं है। क्या इसे पीओजेओ माना जाए?
डीटीओ बनाम वीओ
डीटीओ - डेटा ट्रांसफर ऑब्जेक्ट सिर्फ डेटा कंटेनर होते हैं जिनका उपयोग लेयर्स और टियर्स के बीच डेटा ट्रांसपोर्ट करने के लिए किया जाता है।
सादृश्य:
विशेषता उपयोगकर्ता नाम, पासवर्ड और ईमेल आईडी के साथ सरल पंजीकरण फॉर्म।
- जब यह फॉर्म RegistrationServlet फाइल में सबमिट हो जाता है, तो आपको व्यू लेयर से लेकर बिजनेस लेयर तक की सभी खूबियां मिल जाएंगी, जहां से आप java बीन्स और उसके बाद DAO या दृढ़ता लेयर के लिए एट्रिब्यूट पास करते हैं।
- डीटीओ की विशेषताओं को व्यू लेयर से बिजनेस लेयर तक और अंत में दृढ़ता लेयर तक पहुंचाने में मदद करता है।
डीटीओ का उपयोग मुख्य रूप से नेटवर्क पर डेटा को कुशलता से पहुंचाने के लिए किया जाता था, यह JVM से दूसरे JVM तक भी हो सकता है।
डीटीओ अक्सर java.io.Serializable
जेवीएम में डेटा ट्रांसफर करने के लिए होते हैं।
VO - एक मान ऑब्जेक्ट [1] [2] खुद को डेटा के एक निश्चित सेट का प्रतिनिधित्व करता है और एक जावा एनम के समान है। एक मान ऑब्जेक्ट की पहचान उनकी वस्तु पहचान के बजाय उनके राज्य पर आधारित है और अपरिवर्तनीय है। एक वास्तविक दुनिया का उदाहरण Color.RED, Color.BLUE, SEX.FEMALE आदि होगा।
POJO बनाम जावाबीन
[१] एक पीओजेओ का जावा-बीननेस यह है कि इसकी निजी विशेषताओं को सभी सार्वजनिक गेटर्स के माध्यम से एक्सेस किया जाता है और जो कि JavaBeans सम्मेलनों के अनुरूप हैं। जैसे
private String foo;
public String getFoo(){...}
public void setFoo(String foo){...};
[२] JavaBeans को Serializable लागू करनी चाहिए और एक नो-तर्क निर्माता होना चाहिए, जबकि POJO में ये प्रतिबंध नहीं हैं।
मूल रूप से,
डीटीओ: "डेटा ट्रांसफर ऑब्जेक्ट" सॉफ्टवेयर आर्किटेक्चर में अलग परतों के बीच यात्रा कर सकता है।
VO: "वैल्यू ऑब्जेक्ट्स" एक वस्तु को धारण करता है जैसे कि इंटीजर, मनी आदि।
POJO: सादा पुराना जावा ऑब्जेक्ट जो एक विशेष वस्तु नहीं है।
जावा बीन्स: एक Java Class
क्रमिक होने की आवश्यकता है , एक no-arg
निर्माता और प्रत्येक क्षेत्र के लिए एक गेट्टर और सेटर है
जावा बीन्स ईजेबी के समान नहीं हैं।
JavaBeans विनिर्देश जावा 1.0 में सूर्य की जावा एक IDE कि वीबी की तरह दिखाई देता में चालाकी करने की वस्तुओं अनुमति देने के लिए प्रयास किया गया। "जावा बीन्स" के रूप में योग्य वस्तुओं के लिए नियम निर्धारित किए गए थे:
ईजेबी बाद में आए। वे वितरित घटकों और एक ट्रांसेक्शनल मॉडल को जोड़ते हैं, एक कंटेनर में चल रहे हैं जो थ्रेड्स, पूलिंग, जीवन चक्र का प्रबंधन करता है, और सेवाएं प्रदान करता है। वे जावा बीन्स से बहुत दूर हैं।
डीटीओ जावा संदर्भ में आया क्योंकि लोगों को पता चला कि डेटाबेस के साथ EJB 1.0 युक्ति बहुत "चैट्टी" थी। हर डेटा तत्व के लिए एक राउंडट्रिप बनाने के बजाय, लोग उन्हें जावा बीन्स में थोक में पैकेज करेंगे और उन्हें चारों ओर भेज देंगे।
पीओजेओ ईजेबी के खिलाफ एक प्रतिक्रिया थे।
POJO : यह एक जावा फ़ाइल (क्लास) है जो किसी अन्य जावा फ़ाइल (क्लास) का विस्तार या कार्यान्वयन नहीं करती है।
सेम : यह एक जावा फ़ाइल (क्लास) है जिसमें सभी चर निजी होते हैं, विधियाँ सार्वजनिक होती हैं और उपयुक्त गेटवे और सेटर चर का उपयोग करने के लिए उपयोग किए जाते हैं।
सामान्य वर्ग : यह एक जावा फ़ाइल (वर्ग) है जिसमें सार्वजनिक / निजी / डिफ़ॉल्ट / संरक्षित चर शामिल हो सकते हैं और जो एक अन्य जावा फ़ाइल (वर्ग) को बढ़ा या लागू नहीं कर सकते हैं।
पहले बात करते हैं
सामान्य वर्ग - इसका मतलब है कि कोई भी वर्ग परिभाषित है जो सामान्य रूप से जावा में है इसका मतलब है कि आप विभिन्न प्रकार की विधि गुण आदि बनाते हैं ।
बीन - बीन कुछ भी नहीं है यह केवल उस विशेष वर्ग की वस्तु है इस बीन का उपयोग करके आप अपने जावा वर्ग को ऑब्जेक्ट के रूप में एक्सेस कर सकते हैं।।
और उसके बाद पिछले एक POJO के बारे में बात करें
POJO - POJO वह वर्ग है जिसकी कोई भी सेवा नहीं है जिसके पास केवल एक डिफ़ॉल्ट निर्माणकर्ता और निजी संपत्ति है और उन संपत्ति के लिए एक समान सेटर और गेट्टर विधियाँ निर्धारित हैं। यह प्लेन जावा ऑब्जेक्ट का संक्षिप्त रूप है।