टी एल; डॉ:
एक डीटीओ राज्य हस्तांतरण के पैटर्न का वर्णन करता है। एक POCO कुछ भी वर्णन नहीं करता है। यह ओओपी में "ऑब्जेक्ट" कहने का एक और तरीका है। यह POJO (जावा) से आता है, जो मार्टिन फॉलर द्वारा गढ़ा गया है, जो इसे केवल 'ऑब्जेक्ट' के लिए एक कट्टर नाम के रूप में वर्णित करता है क्योंकि 'ऑब्जेक्ट' बहुत सेक्सी नहीं है।
एक डीटीओ एक वस्तु पैटर्न है जिसका उपयोग चिंता की परतों के बीच राज्य को स्थानांतरित करने के लिए किया जाता है। उनका व्यवहार हो सकता है (यानी तकनीकी रूप से एक पोको हो सकता है) जब तक कि व्यवहार राज्य को बदल नहीं देता है। उदाहरण के लिए, यह एक विधि हो सकती है जो स्वयं को क्रमबद्ध करती है।
एक POCO एक सादा वस्तु है, लेकिन 'सादे' से क्या तात्पर्य है, यह विशेष नहीं है। इसका मतलब यह है कि यह एक सीएलआर ऑब्जेक्ट है, जिसमें कोई निहित पैटर्न नहीं है। एक सामान्य शब्द। इसे किसी अन्य ढांचे के साथ काम करने के लिए नहीं बनाया गया है। [JsonProperty]
उदाहरण के लिए, यदि आपके POCO के पास या EF की सभी संपत्तियां हैं, तो यह तर्क है कि यह POCO नहीं है।
तुलना करने के लिए विभिन्न प्रकार के ऑब्जेक्ट पैटर्न के कुछ उदाहरण यहां दिए गए हैं:
- देखें मॉडल : एक दृश्य के लिए मॉडल डेटा का उपयोग किया जाता है। आमतौर पर बाध्यकारी और सत्यापन की सहायता के लिए डेटा एनोटेशन होते हैं। MVVM में, यह एक नियंत्रक के रूप में भी कार्य करता है। यह डीटीओ से अधिक है
- मान ऑब्जेक्ट : मानों का प्रतिनिधित्व करने के लिए उपयोग किया जाता है
- एग्रीगेट रूट : का उपयोग राज्य और आक्रमणकारियों का प्रबंधन करने के लिए किया जाता है
- हैंडलर : किसी घटना / संदेश का जवाब देने के लिए उपयोग किया जाता है
- विशेषताएँ : क्रॉस-कटिंग चिंताओं से निपटने के लिए सजावट के रूप में उपयोग किया जाता है
- सेवा : जटिल कार्यों को करने के लिए उपयोग किया जाता है
- नियंत्रक : अनुरोधों और प्रतिक्रियाओं के प्रवाह को नियंत्रित करने के लिए उपयोग किया जाता है
- फैक्ट्री : जब कोई कंस्ट्रक्टर पर्याप्त रूप से अच्छा न हो तो उपयोग के लिए जटिल वस्तुओं को कॉन्फ़िगर और / या इकट्ठा करने के लिए उपयोग किया जाता है। यह भी निर्णय लेने के लिए उपयोग किया जाता है कि किन वस्तुओं को रनटाइम पर बनाने की आवश्यकता है।
- रिपॉजिटरी / DAO : डेटा तक पहुंचने के लिए उपयोग किया जाता है
ये सभी केवल वस्तुएं हैं, लेकिन ध्यान दें कि उनमें से ज्यादातर आम तौर पर एक पैटर्न से बंधे होते हैं। इसलिए आप उन्हें "ऑब्जेक्ट" कह सकते हैं या आप इसके इरादे के बारे में अधिक विशिष्ट हो सकते हैं और इसे कॉल कर सकते हैं कि यह क्या है। यह भी क्यों हम डिजाइन पैटर्न है; कुछ कार्यों में जटिल अवधारणाओं का वर्णन करने के लिए। DTO एक पैटर्न है। एग्रीगेट रूट एक पैटर्न है, व्यू मॉडल एक पैटर्न है (जैसे एमवीसी और एमवीवीएम)। POCO एक पैटर्न नहीं है।
एक POCO एक पैटर्न का वर्णन नहीं करता है। यह ओओपी में कक्षाओं / वस्तुओं का जिक्र करने का एक अलग तरीका है। इसे एक अमूर्त अवधारणा के रूप में सोचें; वे किसी भी चीज का जिक्र कर सकते हैं। IMO, एकतरफा संबंध है, क्योंकि एक बार जब कोई वस्तु उस बिंदु पर पहुंच जाती है, जहां वह केवल एक उद्देश्य की सफाई से सेवा कर सकता है, तो वह अब POCO नहीं है। उदाहरण के लिए, एक बार जब आप अपनी कक्षा को सजावट के साथ चिह्नित करते हैं, तो कुछ रूपरेखा के साथ काम करने के लिए, यह अब पीओसीओ नहीं है। इसलिए:
- एक DTO एक POCO है
- एक POCO एक DTO नहीं है
- एक दृश्य मॉडल एक POCO है
- एक POCO एक View Model नहीं है
दोनों के बीच एक अंतर बनाने की बात यह है कि चिंताओं को पार न करने और तंग युग्मन की ओर ले जाने के प्रयास में पैटर्न स्पष्ट और सुसंगत रहें। उदाहरण के लिए यदि आपके पास कोई व्यावसायिक ऑब्जेक्ट है जिसमें स्थिति को म्यूट करने के लिए तरीके हैं, लेकिन SQL सर्वर और JsonProperty को बचाने के लिए EF सजावट के साथ नरक में भी सजाया गया है ताकि इसे एक एपीआई समापन बिंदु पर वापस भेजा जा सके। यह ऑब्जेक्ट बदलने के लिए असहिष्णु होगा, और संभवतः गुणों के वेरिएंट के साथ अटे पड़े होंगे (जैसे UserId, UserPk, UserKey, UserGuid, जहां उनमें से कुछ को डीबी में सहेजे नहीं जाने के लिए चिह्नित किया गया है और अन्य को क्रमबद्ध नहीं किया जाएगा। JSON एपीआई समापन बिंदु पर)।
इसलिए यदि आप मुझे कुछ बताने के लिए एक डीटीओ थे, तो मैं शायद यह सुनिश्चित करूंगा कि इसे कभी भी राज्य के आसपास घूमने के अलावा किसी और चीज के लिए इस्तेमाल नहीं किया गया था। यदि आपने मुझे बताया कि कोई दृश्य मॉडल था, तो मैं शायद यह सुनिश्चित करूँगा कि यह डेटाबेस में सहेजा नहीं जा रहा है। यदि आपने मुझे बताया कि कोई डोमेन मॉडल था, तो मैं शायद यह सुनिश्चित करूँगा कि डोमेन के बाहर किसी चीज पर उसकी कोई निर्भरता न हो। लेकिन अगर आपने मुझे कुछ बताया कि पोस्को था, तो आप वास्तव में मुझे बिल्कुल नहीं बताएंगे।