DTO, VO, POJO, JavaBeans के बीच अंतर?


584

कुछ ऐसे ही सवाल देखे हैं:

क्या आप कृपया मुझे उन संदर्भों को भी बता सकते हैं जिनमें उनका उपयोग किया गया है? या उन का उद्देश्य?


1
POJO बिना किसी प्रतिबंध के साथ आता है, जहाँ जावबीन ऊपर वर्णित प्रतिबंधों के साथ आते हैं
exexzian

जवाबों:


848

JavaBeans

एक जावाबीन एक वर्ग है जो सूर्य द्वारा परिभाषित JavaBeans सम्मेलनों का अनुसरण करता है। विकिपीडिया के जावाबीन क्या हैं, इसका एक बहुत अच्छा सारांश है :

JavaBeans जावा के लिए पुन: प्रयोज्य सॉफ्टवेयर घटक हैं जिन्हें एक बिल्डर टूल में नेत्रहीन रूप से हेरफेर किया जा सकता है। व्यावहारिक रूप से, वे एक विशेष सम्मेलन के अनुरूप जावा प्रोग्रामिंग भाषा में लिखी गई कक्षाएं हैं। उनका उपयोग कई वस्तुओं को एक ही वस्तु (बीन) में घेरने के लिए किया जाता है, ताकि उन्हें कई व्यक्तिगत वस्तुओं के बजाय एक ही बीन ऑब्जेक्ट के रूप में पास किया जा सके। एक जावाबैन एक जावा ऑब्जेक्ट है जो धारावाहिक है, एक अशक्त कंस्ट्रक्टर है, और गेट्टर और सेटलेट विधियों का उपयोग करके गुणों तक पहुंचने की अनुमति देता है।

JavaBean क्लास के रूप में कार्य करने के लिए, ऑब्जेक्ट नामकरण, निर्माण, और व्यवहार के बारे में एक ऑब्जेक्ट क्लास को कुछ सम्मेलनों का पालन करना चाहिए। ये कन्वेंशनों में ऐसे उपकरण होना संभव है जो JavaBeans का उपयोग, पुन: उपयोग, प्रतिस्थापित और कनेक्ट कर सकते हैं।

आवश्यक सम्मेलन हैं:

  • कक्षा में एक सार्वजनिक डिफ़ॉल्ट निर्माता होना चाहिए। यह संपादन और सक्रियण ढांचे के भीतर आसान तात्कालिकता की अनुमति देता है।
  • एक मानक नामकरण सम्मलेन के बाद, क्लास सेट, और अन्य तरीकों (तथाकथित एक्सेसर विधियों और म्यूटेटर विधियों) का उपयोग करके वर्ग के गुणों को सुलभ होना चाहिए। यह आसान स्वचालित निरीक्षण और रूपरेखाओं के भीतर बीन राज्य के अद्यतन की अनुमति देता है, जिनमें से कई विभिन्न प्रकार के गुणों के लिए कस्टम संपादकों में शामिल हैं।
  • वर्ग क्रमबद्ध होना चाहिए। यह अनुप्रयोगों और रूपरेखाओं को मज़बूती से सहेजने, संग्रहीत करने, और सेम की अवस्था को एक ऐसे फैशन में पुनर्स्थापित करने की अनुमति देता है जो वीएम और प्लेटफ़ॉर्म से स्वतंत्र है।

क्योंकि इन आवश्यकताओं को बड़े पैमाने पर इंटरफेस को लागू करने के बजाय सम्मेलनों के रूप में व्यक्त किया जाता है, कुछ डेवलपर्स JavaBeans को प्लेन ओल्ड जावा ऑब्जेक्ट के रूप में देखते हैं जो विशिष्ट नामकरण सम्मेलनों का पालन करते हैं।

POJO

प्लेन ओल्ड जावा ऑब्जेक्ट या पीओजेओ एक शब्द है जिसे शुरू में एक साधारण हल्के जावा ऑब्जेक्ट को नामित करने के लिए पेश किया गया है, किसी भी 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 हैं।


1
इसलिए अगर मेरे पास एक सुविधा वर्ग है जो असंबंधित डेटा को स्थानांतरित करने के लिए बनाया गया है जैसे class SomeClass { public String foo;public String bar; }एक वर्ग के अंदर एक जटिल तर्क के साथ, यह सुनिश्चित करने के लिए कि यह जावाबीन नहीं है, यह एक वीओ नहीं हो सकता है क्योंकि यह परिवर्तनशील है, क्या यह एक हो सकता है डीटीओ? यह किसी भी प्रकार के दूरस्थ आह्वान के लिए लक्षित नहीं है। क्या इसे पीओजेओ माना जाए?
जेम हैब्टलजेल

3
@ user2601512: यह अभी भी एक बीन होगा। : पी बीन के साथ कुछ भी गलत नहीं है व्यवहार - वास्तव में, यह बहुत उम्मीद है। यदि यह कुछ और नहीं करता है, तो यह मूल रूप से एक डीटीओ है।
cHao

7
@xSNRG: आंशिक रूप से क्योंकि यह उन वस्तुओं को डेटा में बदल देता है जो अन्य कोड कार्य करता है। यह एक OO के नजरिए से एक कदम पीछे है, जहां वस्तुएं कार्य करती हैं और अपने राज्य के लिए जिम्मेदार होनी चाहिए। डीटीओ कभी-कभी एक सभ्य समाधान होता है यदि आप वास्तव में केवल डेटा स्थानांतरित कर रहे हैं - इसलिए नाम - लेकिन एन्कैप्सुलेशन मूल रूप से खिड़की से बाहर निकलता है, और आप आमतौर पर कोई वैधता / संगतता गारंटी देते हैं कि एक वास्तविक वस्तु प्रदान कर सकता है।
cHao

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

1
@ कुमारसैनपेरुमल: डेटा परत डेटा को संग्रहित करने और पुनः प्राप्त करने के लिए है। ऐसा करने के लिए, यह सब है, लेकिन डेटा जो भी वस्तु रखता है, उस तक पूर्ण पहुंच की आवश्यकता है, क्योंकि पुनर्प्राप्ति का अर्थ है किसी वस्तु में मूल्यों को स्थापित करना। लेकिन मॉडल उस डेटा को सिस्टम के भीतर प्रबंधित करता है, और OO सिद्धांतों द्वारा बाध्य होता है, जैसे कि एनकैप्सुलेशन - यह विचार कि ऑब्जेक्ट्स को अपनी आंतरिक स्थिति पर नियंत्रण बनाए रखना चाहिए और अन्य कोडों को मनमाने ढंग से उनके साथ खिलवाड़ नहीं करना चाहिए । डीटीओ उस अंतर को पाट सकते हैं; डेटा लेयर उन्हें इच्छानुसार एक्सेस कर सकती है, और मॉडल को नियंत्रण का त्याग नहीं करना होगा।
cHao

66

डीटीओ बनाम वीओ

डीटीओ - डेटा ट्रांसफर ऑब्जेक्ट सिर्फ डेटा कंटेनर होते हैं जिनका उपयोग लेयर्स और टियर्स के बीच डेटा ट्रांसपोर्ट करने के लिए किया जाता है।

  • इसमें मुख्य रूप से विशेषताएँ हैं। आप बिना गेटर्स और सेटर के भी सार्वजनिक विशेषताओं का उपयोग कर सकते हैं।
  • डेटा ट्रांसफर ऑब्जेक्ट में कोई व्यावसायिक तर्क नहीं होता है।

सादृश्य:
विशेषता उपयोगकर्ता नाम, पासवर्ड और ईमेल आईडी के साथ सरल पंजीकरण फॉर्म।

  • जब यह फॉर्म 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 में ये प्रतिबंध नहीं हैं।


देर से आने के लिए टिप्पणी के लिए क्षमा करें, लेकिन मैं उनके बीच अंतर के बारे में सीख रहा हूं और मेरे पास एक सवाल है। क्या होगा अगर मेरे पास जावा बीन क्लास है, लेकिन doSomething () जैसे अन्य तरीकों के साथ। यह किस तरह का वर्ग होगा? सादर
jscherman

@srinivas हम DOMAIN या MODEL java ऑब्जेक्ट में डेटा पास क्यों नहीं कर सकते? लेकिन मैं बिना DTO के MODEL का उपयोग करता हूँ। कृपया मुझे संक्षेप में समझाएं। धन्यवाद
कुमारेसन पेरूमल

46

मूल रूप से,

डीटीओ: "डेटा ट्रांसफर ऑब्जेक्ट" सॉफ्टवेयर आर्किटेक्चर में अलग परतों के बीच यात्रा कर सकता है।

VO: "वैल्यू ऑब्जेक्ट्स" एक वस्तु को धारण करता है जैसे कि इंटीजर, मनी आदि।

POJO: सादा पुराना जावा ऑब्जेक्ट जो एक विशेष वस्तु नहीं है।

जावा बीन्स: एक Java Classक्रमिक होने की आवश्यकता है , एक no-argनिर्माता और प्रत्येक क्षेत्र के लिए एक गेट्टर और सेटर है


ये वर्णन अधिकतर गलत / अपूर्ण हैं।
cellepo

24

जावा बीन्स ईजेबी के समान नहीं हैं।

JavaBeans विनिर्देश जावा 1.0 में सूर्य की जावा एक IDE कि वीबी की तरह दिखाई देता में चालाकी करने की वस्तुओं अनुमति देने के लिए प्रयास किया गया। "जावा बीन्स" के रूप में योग्य वस्तुओं के लिए नियम निर्धारित किए गए थे:

  1. डिफ़ॉल्ट निर्माता
  2. उचित नामकरण सम्मेलन के बाद निजी डेटा सदस्यों के लिए गेटर्स और सेटर
  3. serializable
  4. शायद दूसरों कि मैं भूल रहा हूँ।

ईजेबी बाद में आए। वे वितरित घटकों और एक ट्रांसेक्शनल मॉडल को जोड़ते हैं, एक कंटेनर में चल रहे हैं जो थ्रेड्स, पूलिंग, जीवन चक्र का प्रबंधन करता है, और सेवाएं प्रदान करता है। वे जावा बीन्स से बहुत दूर हैं।

डीटीओ जावा संदर्भ में आया क्योंकि लोगों को पता चला कि डेटाबेस के साथ EJB 1.0 युक्ति बहुत "चैट्टी" थी। हर डेटा तत्व के लिए एक राउंडट्रिप बनाने के बजाय, लोग उन्हें जावा बीन्स में थोक में पैकेज करेंगे और उन्हें चारों ओर भेज देंगे।

पीओजेओ ईजेबी के खिलाफ एक प्रतिक्रिया थे।


1
मैं गलत था और मैंने अपना संदेश हटाना पसंद किया। सुधार के लिए धन्यवाद। मैं नोटिस करना चाहता हूं कि कुछ समय पहले पीओजेओ का अर्थ बदल गया है। पहला, वे केवल निजी संपत्तियों और उनके एक्सेसरों से बने हैं। अब, हम एक POJO को एनोटेशन के साथ एक वर्ग मानते हैं, अन्य वर्गों को लागू करने और विस्तार करने, आदि
sinuhepop

VO के बारे में, जैसा कि प्रश्न पूछा गया था? यह एक उत्तर नहीं है जब तक कि यह पूर्ण प्रश्न का उत्तर नहीं देता है
cellepo

4

POJO : यह एक जावा फ़ाइल (क्लास) है जो किसी अन्य जावा फ़ाइल (क्लास) का विस्तार या कार्यान्वयन नहीं करती है।

सेम : यह एक जावा फ़ाइल (क्लास) है जिसमें सभी चर निजी होते हैं, विधियाँ सार्वजनिक होती हैं और उपयुक्त गेटवे और सेटर चर का उपयोग करने के लिए उपयोग किए जाते हैं।

सामान्य वर्ग : यह एक जावा फ़ाइल (वर्ग) है जिसमें सार्वजनिक / निजी / डिफ़ॉल्ट / संरक्षित चर शामिल हो सकते हैं और जो एक अन्य जावा फ़ाइल (वर्ग) को बढ़ा या लागू नहीं कर सकते हैं।


VO के बारे में, जैसा कि प्रश्न पूछा गया था? यह एक उत्तर नहीं है जब तक कि यह पूर्ण प्रश्न का उत्तर नहीं देता है
cellepo

1

पहले बात करते हैं

सामान्य वर्ग - इसका मतलब है कि कोई भी वर्ग परिभाषित है जो सामान्य रूप से जावा में है इसका मतलब है कि आप विभिन्न प्रकार की विधि गुण आदि बनाते हैं
बीन - बीन कुछ भी नहीं है यह केवल उस विशेष वर्ग की वस्तु है इस बीन का उपयोग करके आप अपने जावा वर्ग को ऑब्जेक्ट के रूप में एक्सेस कर सकते हैं।

और उसके बाद पिछले एक POJO के बारे में बात करें

POJO - POJO वह वर्ग है जिसकी कोई भी सेवा नहीं है जिसके पास केवल एक डिफ़ॉल्ट निर्माणकर्ता और निजी संपत्ति है और उन संपत्ति के लिए एक समान सेटर और गेट्टर विधियाँ निर्धारित हैं। यह प्लेन जावा ऑब्जेक्ट का संक्षिप्त रूप है।


VO के बारे में, जैसा कि प्रश्न पूछा गया था? यह एक उत्तर नहीं है जब तक कि यह पूर्ण प्रश्न का उत्तर नहीं देता है
cellepo

1
  • मूल्य वस्तु : वस्तुओं के मूल्य के आधार पर वस्तुओं की समानता को मापने की आवश्यकता होने पर उपयोग करें।
  • डेटा ट्रांसफर ऑब्जेक्ट : दूरस्थ सर्वर पर कई कॉल से बचने के लिए, क्लाइंट से सर्वर तक एक शॉट में कई विशेषताओं के साथ डेटा पास करें।
  • सादा पुराना जावा ऑब्जेक्ट : यह साधारण वर्ग की तरह है जो गुण, सार्वजनिक नो-आर्ग कंस्ट्रक्टर है। जैसा कि हम जेपीए इकाई के लिए घोषणा करते हैं।

अंतर-बीच-मान-वस्तु पैटर्न और डाटा अंतरण पैटर्न

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.