2008-11-04 17 views
8

पोर्टफोलियो A -> फंड 1"इज़ ए" बनाम "हैस ए": कौन सा बेहतर है?

पोर्टफोलियो A -> फंड 2

पोर्टफोलियो A -> फंड 3

मैं का उपयोग नहीं कर रहा है/है बिना मेरे वाक्य फ्रेम नहीं कर सका। लेकिन

1) 2, 1 & के बीच एक है:

class PortfolioA 
{ 
    List<Fund> obj; 
} 

2) एक है:

class PortfolioA : List<Fund> 
{ 

} 

जो एक आपको लगता है तानाना, प्रयोज्य के बिंदु से बेहतर है? मैं अभी भी एक छोटे से वाक्य रचनात्मक परिवर्तन के बावजूद, मेरे धन को किसी भी तरह से एक्सेस कर सकता हूं।

+1

यह भी देखें [पसंद-रचना-ओवर-विरासत?] (Http://stackoverflow.com/questions/49002/prefer-composition-over-inheritance?rq=1) – nawfal

उत्तर

15

मैं अन्य लोग शामिल किए जाएं-ए इस मामले में बेहतर है के साथ वोट देते हैं। आप एक टिप्पणी में पूछते हैं:

जब मैं कहता हूँ कि एक पोर्टफोलियो धन का सिर्फ एक संग्रह है, अपने स्वयं के तरह TotalPortfolio आदि, है कि मौलिक नहीं बन के कुछ ही गुण एक "के साथ है-एक "?

मैं ऐसा नहीं सोचता। यदि आप Portfolio आईएस-ए List<Fund> कहते हैं, पोर्टफोलियो के अन्य गुणों के बारे में क्या? बेशक आप इस वर्ग में गुण जोड़ सकते हैं, लेकिन क्या यह गुण सूची के गुणों के रूप में उन गुणों को मॉडल करना सटीक है? क्योंकि यह मूल रूप से आप क्या कर रहे हैं।

इसके अलावा क्या हुआ अगर एक पोर्टफोलियो एक से अधिक List<Fund> समर्थन करने के लिए आवश्यक है? उदाहरण के लिए, आपके पास एक सूची हो सकती है जो निवेश की वर्तमान शेष राशि दिखाती है, लेकिन एक और सूची जो दिखाती है कि नए योगदान कैसे निवेश किए जाते हैं। और जब धन बंद हो जाता है, और धन का एक नया सेट उनको सफल करने के लिए उपयोग किया जाता है? ऐतिहासिक जानकारी ट्रैक के साथ-साथ वर्तमान निधि आवंटन के लिए उपयोगी है।

बिंदु यह है कि ये सभी गुण एक सूची के सही गुण नहीं हैं, हालांकि वे पोर्टफोलियो के गुण हो सकते हैं।

+1

बिल्कुल! आप इसके लिए एक और भी मजबूत मामला बना सकते हैं: यहां तक ​​कि निम्न 'सूची' में अतिरिक्त गुण भी हैं (उदा। लंबाई) जिनके तत्वों में से किसी एक * के साथ कुछ लेना देना नहीं है। इसलिए, 'सूची ' एक "[सूची] है-एक [फंड]" संबंध भी है। – jpaugh

7

पहला, क्योंकि जब आप कर सकते हैं तो आपको विरासत पर संरचना का पक्ष लेने का प्रयास करना चाहिए।

+4

क्या आप उस कथन को औचित्य दे सकते हैं? – Blorgbeard

+0

मैं इसे इस तरह से वाक्यांश नहीं दूंगा। –

+1

वह सही है, हमेशा जब आप कर सकते हैं। शायद हमेशा नहीं, लेकिन जब तक यह कोई ब्रेनर नहीं है तब तक यह काफी बेहतर होता है। अधिक जानकारी के लिए Google "बुराई बढ़ाता है"। –

2

मैं विकल्प (1) - रचना के साथ जाऊंगा, क्योंकि अंततः आपके पास धन के बजाय पोर्टफोलियो के लिए विशिष्ट गुण हो सकते हैं।

2

पहला, क्योंकि यह "" होता है। => संरचना

8

'हमेशा' रचना या विरासत या इसके विपरीत का पक्ष नहीं है; उनके पास विभिन्न अर्थशास्त्र (अर्थ) हैं; अर्थों पर सावधानी से देखो, फिर फैसला करें - इससे कोई फर्क नहीं पड़ता कि कोई दूसरे की तुलना में 'आसान' है, लंबे समय तक यह मायने रखता है कि आपको अर्थशास्त्र प्राप्त होता है

याद रखें: is-a = type, has-a = रोकथाम

इसलिए इस मामले में, पोर्टफोलियो तार्किक रूप से धन का संग्रह है; एक पोर्टफोलियो ही है नहीं एक प्रकार निधि की, इसलिए रचना सही संबंध है

संपादित करें: मैं मूल रूप से प्रश्न पढ़ने में भूलना, लेकिन इस सवाल का जवाब अभी भी एक ही है। एक पोर्टफोलियो एक प्रकार की सूची नहीं है, यह अपनी संपत्तियों के साथ एक विशिष्ट इकाई है। उदाहरण के लिए, एक पोर्टफोलियो प्रारंभिक निवेश लागत, कुल वर्तमान मूल्य, समय के साथ मूल्यों का इतिहास इत्यादि के साथ वित्तीय उपकरणों का एक कुल है, जबकि सूची वस्तुओं का एक साधारण संग्रह है। एक पोर्टफोलियो केवल 'सारणी का प्रकार' है जो केवल सबसे अमूर्त अर्थ में है।

संपादित करें 2: पोर्टफोलियो की परिभाषा के बारे में सोचें - यह अपवाद के बिना चीजों के संग्रह के रूप में वर्णित है। एक कलाकार का पोर्टफोलियो उनके आर्टवर्क का संग्रह है, एक वेब डिज़ाइनर पोर्टफोलियो उनकी वेबसाइटों का संग्रह है, एक निवेशक के पोर्टफोलियो में उनके सभी वित्तीय साधन होते हैं, और इसी तरह। तो स्पष्ट रूप से हमें एक पोर्टफोलियो का प्रतिनिधित्व करने के लिए एक सूची (या किसी तरह की) की आवश्यकता है, लेकिन इसका कोई मतलब नहीं है कि पोर्टफोलियो एक प्रकार की सूची है!

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

सारांश: डाटा संरचनाओं हम एक अवधारणा का प्रतिनिधित्व करने के लिए चुनते हैं और इस अवधारणा के ही अर्थ विज्ञान (प्रकार पदानुक्रम) के बीच अंतर।

+0

सही हैं, पोर्टफोलियो एक प्रकार का फंड था, क्या यह समझ में आया होगा। यहां पोर्टफोलियो धन की एक सूची है, जो कि सभी फंडों पर लागू संपत्तियों के एक सेट के साथ है। मैं अभी भी नहीं देखता कि इसे एक-ए के रूप में कैसे नहीं कहा जा सकता है। या यह इस मामले में आप अपनी सजा कैसे बनाते हैं? – aliensurfer

+0

@PrakashR: मैंने वास्तव में प्रश्न को गलत तरीके से पढ़ा और सोचा कि आप पोर्टफोलियो को फंड का उप-वर्ग बनाना चाहते हैं ;-) पोर्टफोलियो को सूची के उप-वर्ग बनाने के लिए और भी बदतर होगा, क्योंकि सूची एक सामान्य संग्रह है और पोर्टफोलियो एक कानूनी इकाई है। पोर्टफोलियो का समय टी पर कुल मूल्य है, सूचियां नहीं हैं, आदि –

4

यह है कि क्या व्यापार धन के एक समूह (और केवल एक समूह) के रूप में एक पोर्टफोलियो को परिभाषित करता है निर्भर करता है। यदि यहां तक ​​कि रिमोट संभावना भी है कि इसमें अन्य वस्तुएं हो सकती हैं, तो "संपत्ति" कहें, फिर विकल्प 1 के साथ जाएं। यदि फंड के समूह और पोर्टफोलियो की अवधारणा के बीच एक मजबूत लिंक है तो विकल्प 2 के साथ जाएं।

जहाँ तक तानाना और usefullness 1 के रूप में मामूली लाभ 2. से अधिक मैं वास्तव में अवधारणा है कि आप हमेशा एक दूसरे के ऊपर एहसान चाहिए से असहमत है। यह वास्तव में वास्तविक वास्तविक जीवन अवधारणाओं पर निर्भर करता है। याद रखें, आप हमेशा^रिफैक्टर कर सकते हैं।

^हमेशा के अधिकांश उदाहरणों के लिए। यदि यह सार्वजनिक रूप से उजागर किया गया है, तो जाहिर है नहीं।

+0

मैं यहां रॉब से सहमत हूं। मेरे पास बॉन्ड और स्टॉक और आईआरए हैं, इसलिए मेरा पोर्टफोलियो मेरे फंड की सूची नहीं है। मैं दूसरे के साथ भी सहमत नहीं हूं। यदि यह "एक है" तो यह है। अगर यह "एक है" तो यह करता है .. – baash05

1

मैं क्या आम राय प्रतीत होता है के साथ अलग होगा। इस मामले में मैं के रूप में, लगता है कि एक पोर्टफोलियो में बहुत कम धनराशि का एक संग्रह से अधिक है वंशानुक्रम का उपयोग आप एक से अधिक निर्माताओं के उपयोग की अनुमति से ...

public Portfolio(CLient client) {}; 
public Portfolio(Branch branch, bool Active, decimal valueThreshold) 
{ 
    // code to populate collection with all active portfolios at the specified branch whose total vlaue exceeds specified threshold 
} 

और indexers में के रूप में:

public Fund this[int fundId] { get { return this.fundList[fundId]; } } 

इत्यादि।

यदि आप संबंधित वाक्यविन्यास के साथ धन के संग्रह के रूप में प्रकार पोर्टफोलियो के चर के इलाज में सक्षम होना चाहते हैं, तो यह बेहतर दृष्टिकोण है।

Portfolio BobsPortfolio = new Portfolio(Bob); 

foreach (Fund fund in BobsPortfolio) 
{ 
    fund.SendStatement(); 
} 

या कि

+0

मैं उस तरह की सुलभता उपयोगिता का जिक्र कर रहा था। लेकिन फिर एक शुद्ध दृष्टिकोण से, एक "है-ए" अधिक उपयुक्त लगता है। मैं ऊपर से एक उत्तर पर सहमत हूं। अनिवार्य रूप से यह है कि व्यापार (और आप) इसे कैसे समझते हैं। – aliensurfer

+0

एक अर्थ में, संग्रह कक्षाएं मेरे लिए शुद्ध दृष्टिकोण के अपवाद हैं, परिभाषा के कारण, चीजों का एक संग्रह "इसमें" चीजों का एक समूह है ... यह संग्रह की प्रकृति है ... –

+0

जब मैं अभिभावक ऑब्जेक्ट में अधीनस्थ वस्तुओं के विभिन्न वर्गों के एक से अधिक संग्रह होते हैं तो मैं रेखा खींचूंगा ... जैसे कि आप खिलाड़ियों के आंतरिक संग्रह के साथ एक स्पोर्ट्स टीम का मॉडल कर रहे हैं, और अनुसूचित गेम का एक और आंतरिक संग्रह, और दूसरा संग्रह कोच, इत्यादि ... –

0

की तरह सामान IS-एक संबंध जहाज विरासत का प्रतिनिधित्व करता है और HAS-ए संबंध जहाज रचना प्रतिनिधित्व करता है। उपर्युक्त परिदृश्य के लिए हम संरचना पसंद करते हैं क्योंकि पोर्टफोलियो में एक सूची है और यह सूची प्रकार नहीं है।विरासत का उपयोग तब होता है जब पोर्टफोलियो ए एक प्रकार की सूची है लेकिन यहां यह नहीं है। इसलिए इस परिदृश्य के लिए हमें संरचना पसंद करनी चाहिए।

संबंधित मुद्दे