"पीओसीओ" ओआरएम अंतरिक्ष में एक अस्पष्ट शब्द है। लोग इसका अर्थ यह है कि
- "शुद्ध" पीओसीओ, जो कोई परिवर्तन ट्रैकिंग, आलसी लोडिंग, निजी गुण आदि नहीं हैं। वे काम करने के लिए चुनौतीपूर्ण हो सकते हैं।
- Psuedo-POCO प्रॉक्सी:
public virtual
के साथ प्रकार और जिनके पास रनटाइम पर विभिन्न प्रकार हैं।
- स्व-ट्रैकिंग इकाइयां। पीओसीओ नहीं, लेकिन
EntityObject
या तो नहीं।
मुझे "बाहरी ढांचे पर निर्भर नहीं है" परिभाषा कुछ हद तक आत्म-सेवा करने के लिए मिलती है। यह एक ढांचे की सीमाओं को अनदेखा करने का एक तरीका है। यानी, मेरी किताब में प्रॉक्सी असली पीओसीओ नहीं हैं, लेकिन वे उस परिभाषा को पूरा करते हैं।
EntityObject
के साथ क्या गलत है? ज्यादा नहीं। यह काफी हल्का है, और यह .NET का हिस्सा है। यह .NET 4 क्लाइंट प्रोफाइल में भी है। यह आपको ईएफ तक भी नहीं लेता है। हालांकि यह एक अलग ढांचे के साथ "पॉको प्रकार" के रूप में उपयोग करने के लिए अजीब तरह का होगा, यह ठीक काम करेगा। यह सिल्वरलाइट में नहीं है, हालांकि, आईआईआरसी।
पीओसीओ इकाइयों के साथ काम करना कठिन होता है, क्योंकि आप EntityObject
सामान को खो देते हैं जो आपको मुफ्त में देता है। यह बहुत कुछ नहीं है, लेकिन पीओसीओ को चुनने से पहले कुछ विचार करना चाहिए क्योंकि "वे शांत हैं," खासकर ईएफ के लिए नए लोगों के लिए।
एक बात यह है कि बहुत से लोग जो पीओसीओ के बारे में धार्मिक हैं उन्हें अनदेखा करते हैं: गैर-पीओसीओ प्रकारों को मैपिंग करने से आप उन गैर-पीओसीओ प्रकारों को बाहरी रूप से उजागर करने के लिए किसी भी तरह से सीमित नहीं करते हैं। आपका डाटा सेवाओं तुच्छ POCO DTOs पर गैर POCO प्रकार मैप की परियोजना सकता है और आप के लिए चुन सकते केवल उन प्रकार, यानी बेनकाब:
public IEnumerable<FooDto> IFooRepository.SelectAll()
{
return from f in Context.Foos
select new FooDto { Id = f.Id, Name = f.Name };
}
तो मानचित्रण प्रकार और डेटा सेवा प्रकार आसानी से विभिन्न चिंताओं हो सकता है, अगर आपने ऐसा चुना ।
जब आपको पूरी तरह से मैपिंग के लिए गैर-EntityObject
प्रकार की आवश्यकता होती है? खैर, अगर आपको स्वयं ट्रैकिंग इकाइयों की आवश्यकता है, तो यह एक खुला और बंद मामला है। यदि आपको सिल्वरलाइट में अपने मैप किए गए प्रकारों का खुलासा करना चाहिए, तो स्पष्ट रूप से भी।
इसके अलावा यह कम स्पष्ट है। यदि आप सार्वजनिक खपत के लिए डेटा सेवा लिख रहे हैं, तो आपको डीटीओ EntityObject
उपप्रकार नहीं बनाना चाहिए, क्योंकि यह बाद में एक अलग ढांचे में प्लगिंग के तरीके में खड़ा होगा। मैं कभी भी एक अपरिवर्तनीय, सार्वजनिक इंटरफेस को किसी एक ढांचे पर निर्भर नहीं करता, यहां तक कि एक .NET में भी शामिल है। दूसरी ओर, जैसा कि मैंने उपरोक्त कहा है, आप एक प्रकार का पर्दाफाश कर सकते हैं और दूसरे को मानचित्र बना सकते हैं; मैप किए गए प्रकारों का खुलासा करने की कोई आवश्यकता नहीं है, कभी-कभी, और अक्सर उन्हें प्रकट न करने के बहुत अच्छे कारण (शायद वे गैर-सार्वजनिक डेटा होते हैं)।
मैं यह जोड़ना चाहता हूं कि मैं अब पीओसीओ का उपयोग कर रहा हूं, इसलिए मैं अपने गुणों में डेटा एनाटेशन जोड़ सकता हूं, ऐसा कुछ जो मुझे नहीं लगता कि ईएफ डिजाइनर फ़ाइल में ऐसा करना बुद्धिमान होगा क्योंकि उन्हें नियुक्त किया जा सकता है अद्यतन होने पर। हालांकि मुझे शायद इन्हें अपने व्यू मॉडल पर इस्तेमाल करना चाहिए, लेकिन मेरी अधिकांश ज़रूरतों के लिए उन्हें पीओसीओ पर सही जोड़ना आसान है। – JasperLamarCrabb
@ कैनिबेलकोर्से: ईएफ कक्षाएं आंशिक हैं और ऑटो-जेनरेट कोड को संशोधित करने की कोई आवश्यकता नहीं है। ईएफ के साथ DataAnnotations का उपयोग करने में कोई समस्या नहीं है, आपको बस मेटाडेटा कक्षाओं का उपयोग करना होगा। – LukLed