जावा दुनिया में (अधिक सटीक यदि आपके पास एकाधिक विरासत/मिश्रण नहीं हैं) अंगूठे का नियम काफी सरल है: "वर्ग विरासत पर ऑब्जेक्ट संरचना का पक्ष लें"।स्कैला में मिक्सिन बनाम संरचना
यदि आप मिश्रित विशेष रूप से स्केल में भी विचार करते हैं तो यह जानना है कि यह कैसे बदला जाता है?
क्या मिश्रित एकाधिक विरासत, या अधिक कक्षा संरचना का एक तरीका माना जाता है?
क्या "कक्षा संरचना पर ऑब्जेक्ट संरचना का अनुकूलन" (या दूसरी तरफ) दिशानिर्देश भी है?
मैंने कुछ उदाहरण देखे हैं जब लोग ऑब्जेक्ट संरचना का उपयोग करते समय मिश्रण (या दुर्व्यवहार) मिश्रण करते हैं और मुझे हमेशा यकीन नहीं है कि कौन सा बेहतर है। ऐसा नहीं है कि आप उन लोगों के साथ काफी समान चीजें हासिल कर सकते हैं मुझे लगता है, लेकिन वहाँ कुछ मतभेद भी कुछ उदाहरण हैं:
- दृश्यता - साथ mixins सब कुछ सार्वजनिक एपीआई, जो रचना के साथ ऐसा नहीं है का हिस्सा बन जाता।
- शब्दाडंबर - ज्यादातर मामलों में mixins कम वर्बोज़ और उपयोग करने के लिए थोड़ा आसान कर रहे हैं, लेकिन यह हमेशा ऐसा नहीं है (उदाहरण के लिए यदि आप भी जटिल पदानुक्रम में स्वयं प्रकार का उपयोग)
मैं जानता हूँ कि कम जवाब है, " यह निर्भर करता है ", लेकिन शायद कुछ सामान्य स्थिति है जब यह या यह बेहतर है।
दिशा निर्देशों के कुछ उदाहरण मैं अब तक के साथ आ सकता है (यह मानते हुए मैं दो लक्षण एक है और बी और ए बी से कुछ तरीकों का उपयोग करना चाहता):
- आप एक के एपीआई का विस्तार करना चाहते हैं बी से विधियों के साथ मिश्रण, अन्यथा रचना। लेकिन यह मदद नहीं करता है कि मैं जिस वर्ग/उदाहरण को बना रहा हूं वह सार्वजनिक एपीआई का हिस्सा नहीं है।
- यदि आप कुछ पैटर्न का उपयोग करना चाहते हैं जिन्हें मिश्रण की आवश्यकता है (उदा। Stackable Trait Pattern) तो यह एक आसान निर्णय है।
- यदि आपके पास परिपत्र निर्भरता है तो आत्म प्रकार के साथ मिश्रित मदद कर सकते हैं। (मैं इस स्थिति से बचने की कोशिश करता हूं, लेकिन यह हमेशा आसान नहीं होता है)
- यदि आप कुछ गतिशील, रनटाइम निर्णय चाहते हैं तो रचना को कैसे करें, फिर संरचना को ऑब्जेक्ट करें।
कई मामलों में mixins आसान (और/या कम शब्द) होने लगते हैं, लेकिन मैं काफी यकीन है कि वे भी "भगवान वर्ग" और दूसरों को दो ARTIMA लेख में वर्णित जैसे कुछ नुकसान है, कर रहा हूँ: part 1, part 2 (बीटीडब्ल्यू मुझे ऐसा लगता है कि अधिकांश अन्य समस्याएं प्रासंगिक नहीं हैं/स्कैला के लिए इतनी गंभीर नहीं हैं)।
क्या आपके पास इस तरह के अधिक संकेत हैं?
'यह => लॉगिंग' निर्माण का अर्थ क्या है? यह संकलित नहीं करता है। – HRJ
यह एक स्व-प्रकार की एनोटेशन है, जिसे मैं हमेशा सिंटैक्स भूल जाता हूं। संपादित। इस मामले में इसका मतलब है कि MyService को विस्तारित करने वाली कोई भी वस्तु लॉकिंग का विस्तार करना चाहिए –