.NET प्रोग्रामिंग और POCO कक्षाएं


9

मैं आज रात एक विचार कर रहा था जबकि कुछ आवेदन पर विचार करने की आवश्यकता है जिसे मुझे बदलने की आवश्यकता है और यह मुझे सोच में पड़ गया। एंटिटी फ्रेमवर्क एंटिटीज POCO (प्लेन पुरानी सीएलआर ऑब्जेक्ट्स) हैं और ASP.NET MVC में उपयोग किए जाने वाले मॉडल आमतौर पर POCO भी होते हैं। यह मूल रूप से सिर्फ गुणों का मतलब है, कोई विधियां नहीं।

अब OO प्रोग्रामिंग आम तौर पर किसी वस्तु को उसकी कार्यक्षमता को घेरने की अनुमति देता है, जिसमें उसके गुणों के साथ-साथ उसके तरीके भी शामिल होते हैं, यह बहुरूपता होने की अनुमति देता है। POCO वर्गों के उदय के साथ, जेनेरिक रिपॉजिटरी जैसे डिजाइन पैटर्न अधिक लोकप्रिय हो गए हैं। जब अतीत में मेरी वस्तुओं का अपना CRUD ऑपरेशन हुआ होगा, तो अब मैं उन्हें भंडार पर रखूंगा।

क्या यह केवल OO का एक विकास है जहाँ CRUD संचालन को ऑब्जेक्ट से हटाने के लिए हटा दिया जाता है या शायद CRUD ऑपरेशन अतीत में ऑब्जेक्ट स्तर पर नहीं होना चाहिए था और मैं गलत था? बिल्ली, शायद दोनों पूरी तरह से वैध हैं और हमेशा से रहे हैं। इसका सिर्फ एक अवलोकन है जो मुझे सोच रहा है, इसलिए मुझे लगा कि मैं अन्य राय लेना चाहूंगा।

जवाबों:


9

जैसा कि वायट ने कहा, POCO और POJO का कोई मतलब नहीं है। मुझे लगता है कि गैर-पीओसीओ और गैर-पीओजेओ न जाने क्या है।

ORM प्रौद्योगिकियों के पहले संस्करणों में POCO और POJO नहीं थे, क्योंकि इसके लिए कुछ आधार वर्ग के ढांचे के आधार पर ही संस्थाओं की आवश्यकता थी। जावा, एंटिटी बीन्स के मामले में। एंटिटी फ्रेमवर्क के मामले में, POCO बहुत पहले संस्करण में संभव नहीं था और प्रत्येक इकाई को Entityबेस क्लास की आवश्यकता थी ।

इस आवश्यकता ने दृढ़ता प्रौद्योगिकी पर आपके डेटा मॉडल की निर्भरता को बनाया, जो बहुत सारी चीजों को कठिन या असंभव बनाता है। मॉडल का परीक्षण करने जैसी चीजों के लिए बीन / इकाई ढांचे का मजाक उड़ाने की आवश्यकता होती है जो व्यावहारिक रूप से असंभव साबित हुई। आप विभिन्न दृढ़ता प्रौद्योगिकी के साथ मॉडल का उपयोग नहीं कर सकते हैं या आप मोबाइल वातावरण की तरह मॉडल को विभिन्न संदर्भों में उपयोग नहीं कर सकते हैं।

तो आपकी धारणा है कि पीओसीओ गैर-मौजूदगी के तरीकों के बारे में गलत है। POCO यह दृढ़ता प्रौद्योगिकी से अलग होने में मॉडल का उपयोग करने में सक्षम होने के बारे में है।

आप जिस बारे में बात कर रहे हैं वह संभवतः एनीमिक डोमेन मॉडल बनाम उचित डोमेन मॉडल के करीब है ।


आप सही हैं, यह उस लेख को पढ़ते हुए एनीमिक डोमेन मॉडल जैसा दिखता है।
जेम्स

4

POCO का कोई मतलब नहीं है कि वहाँ कोई विधियाँ नहीं हैं - हालाँकि अधिकांश उदाहरणों में MVC ऑटो बाइंडिंग सुविधाओं का अधिक उपयोग होता है जो मुख्य रूप से गुणों के साथ व्यवहार करते हैं और तरीकों की उपेक्षा करते हैं।

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


एह? पोको का पूरी तरह से मेरे अनुभव में कोई तरीका नहीं है - अन्यथा यह एक इकाई या मॉडल या दृश्य मॉडल है जो उपयोग पर निर्भर करता है।
तेलेस्टिन डे

2
पिछली बार जब मैंने प्लेन ओल्ड सी-शार्प ऑब्जेक्ट चेक किया था तो उसके तरीके हो सकते हैं। यह शब्द खराब पुराने दिनों के बारे में आया था, जहां आपके पास टाइप किए गए डेटासेट जैसे सामान थे या अन्यथा आपके मॉडल ऑब्जेक्ट्स को विशिष्ट वर्गों से विरासत में मिला और पीओसीओ न होने के कारण था।
व्याट बार्नेट

ऑब्जेक्ट को विधि पर रखते हुए चिंताओं का पृथक्करण प्राप्त किया जा सकता है, विधि को एक इंटरफ़ेस स्वीकार करके। वह इंटरफ़ेस एक प्रकार निर्दिष्ट करेगा जो ऑब्जेक्ट के लिए CRUD संचालन को संभाल सकता है।
जेम्स


0

मैं इस तरह से सामान के लिए एक्सटेंशन तरीके का उपयोग कर रहा हूँ ।

POCO में तर्क होते हैं जो केवल वस्तु के लिए ही समझ में आता है। व्यावसायिक तर्क या समन्वित वस्तु तर्क बीएल विस्तार में जाता है। डेटा एक्सेस या तो डेटा एक्सेस लेयर या डेटा एक्सेस एक्सटेंशन में जा सकता है।

namespace MyApp
{
    public class MyClass
    {
        public string id;
        public string name;
        public int quantity;
        public decimal price;
    }   
}

namespace MyAppBL
{
    public static class MyClassBL
    {
        public static decimal PriceInCart(this MyClass myObject)
        {
            return myObject.quantity > 10 ? myObject.price * 0.9m : myObject.price;
        }
    }
}

namespace MyAppDA
{
    public static class MyClassDA
    {
        public static void Create()
        {
            …
        }

        public static void Read(string myObject)
        {
            …
        }

        public static void Update(this MyClass myObject)
        {
            …
        }

        public static void Delete(this MyClass myObject)
        {
            …
        }
    }
}

यह आपको बहुत अच्छा देता है myObject.PriceInCart()और myObject.Save()आपकी कक्षा को डेटा पर केंद्रित रखते हुए। निश्चित रूप से इसके MyAppDA.Create()बजाय आपके लिए आवश्यक स्टैटिक तरीकों के लिए MyApp.Create()

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