यहाँ कैसे इसके बारे में मैं कारण नहीं है। उदा।
जैसी चीजों के लिए वंशानुक्रम का उपयोग:
फायरमैन < - कर्मचारी < - व्यक्ति गलत है।
जैसे ही फ्रेडी फायरमैन नौकरी बदलता है या बेरोजगार हो जाता है, आपको उसे मारना होगा और नए प्रकार के नए ऑब्जेक्ट को इसके साथ जुड़े पुराने संबंधों के साथ फिर से बनाना होगा।
तो उपर्युक्त समस्या का बेवकूफ समाधान व्यक्ति वर्ग को जॉबटाइट एनम संपत्ति देना होगा। यह कुछ परिदृश्यों में पर्याप्त हो सकता है, उदा। अगर आपको भूमिका/प्रकार से जुड़े बहुत जटिल व्यवहार की आवश्यकता नहीं है।
व्यक्ति वर्ग को भूमिकाओं की एक सूची देने का अधिक सही तरीका होगा। प्रत्येक भूमिका एक समय अवधि के साथ एक रोजगार का प्रतिनिधित्व करता है।
उदा।
freddy.Roles.Add(new Employement(employmentDate, jobTitle));
या कि अगर overkill है:
freddy.CurrentEmployment = new Employement(employmentDate, jobTitle);
इस तरह, फ्रेडी एक डेवलपर w/ओ हम उसे पहले मारने के लिए होने बन सकता है।
हालांकि, मेरे सभी ramblings ने अभी भी जवाब नहीं दिया है यदि आपको नौकरी का उपयोग करना चाहिए या नौकरी के लिए पदानुक्रम टाइप करना चाहिए।
मेम ओओ में शुद्ध में मैं कहूंगा कि यहां नौकरी के लिए विरासत का उपयोग करना अधिक सही है।
लेकिन यदि आप ओ/आर मैपिंग कर रहे हैं तो आप दृश्यों के पीछे थोड़ा अधिक अपूर्ण डेटा मॉडल के साथ समाप्त हो सकते हैं यदि मैपर प्रत्येक उप प्रकार को एक नई तालिका में मैप करने का प्रयास करता है। तो ऐसे मामलों में, यदि मैं प्रकारों से जुड़े कोई वास्तविक/जटिल व्यवहार नहीं करता हूं तो मैं अक्सर enum दृष्टिकोण के लिए जाता हूं। मैं "अगर टाइप == जॉबटाइटल्स.फिरमैन ..." के साथ रह सकता हूं, यदि उपयोग सीमित है और यह चीजों को आसान या कम जटिल बनाता है।
उदा। .NET के लिए इकाई फ्रेमवर्क 4 डिजाइनर केवल प्रत्येक उप प्रकार को एक नई तालिका में मैप कर सकता है। और जब आप अपने डेटाबेस w/o किसी भी वास्तविक लाभ से पूछते हैं तो आपको एक बदसूरत मॉडल या बहुत सारे मिल सकते हैं।
हालांकि यदि प्रकार/भूमिका स्थिर है तो मैं विरासत का उपयोग करता हूं। उदा। उत्पादों के लिए।
आपके पास सीडी < - उत्पाद और पुस्तक < - उत्पाद हो सकता है। विरासत यहां जीतती है क्योंकि इस मामले में आपके पास इस प्रकार से जुड़े विभिन्न राज्य होते हैं। सीडी में कई ट्रैक संपत्ति हो सकती है जबकि किसी पुस्तक में पृष्ठ की संपत्ति की संख्या हो सकती है।
तो संक्षेप में, यह ;-)
भी निर्भर करता है, दिन आप सबसे अधिक संभावना स्विच बयान किसी भी तरह का एक बहुत कुछ के साथ खत्म हो जाएगा के अंत में। मान लीजिए कि आप एक "उत्पाद" संपादित करना चाहते हैं, भले ही आप विरासत का उपयोग करते हैं, तो आप शायद इस तरह कोड होगा:
अगर Response.Redicted ((उत्पाद बुक है)? "~/EditBook.aspx आईडी" + product.id);
क्योंकि इकाई कक्षा में संपादित पुस्तक यूआरएल एन्कोडिंग सादा बदसूरत होगा, क्योंकि यह अपनी साइट संरचना आदि
क्या यह इन-मेमोरी ऑब्जेक्ट मॉडल या ओआरएम के लिए है? मुझे पशु उदाहरण बहुत उपयोगी नहीं लगता है क्योंकि यह वास्तविक ओओ डिज़ाइन करते समय आपके सामने आने वाले कई सामान्य मुद्दों का उपयोग नहीं करता है। –
@ मार्सेलो: सहमत हुए। विशेष रूप से, व्यवहार कोण क्या है? – sfinnie
कुत्तों की छाल, बिल्लियों मेयो, आपके सहयोगी के कार्यान्वयन का उपयोग करके, इन व्यवहारों को सी # (उदाहरण के लिए) में लागू करना मुश्किल होगा। यह अभी भी कार्यात्मक भाषाओं में उपयोगी है जैसे एफ # जहां भेदभाव वाले संघ बहुलवाद प्रदान करने के लिए एक बहुत शक्तिशाली साधन हैं। –