2010-06-29 12 views
10

मैं सोच रहा हूं कि यदि किसी वर्ग को केवल एक और कक्षा में तुरंत चालू किया जाएगा तो इसे उस वर्ग में घोंसला करने का अधिकार है। मुझे लगता है कि इससे हमें अच्छी डिजाइन में मदद मिलेगी। जब मैं अपनी परियोजना को देखता हूं तो मैंने लगभग कभी ऐसा घोंसला नहीं देखा है संरचना.लेकिन अगर मैं कक्षाओं को घोंसला करने की कोशिश करता हूं तो इस बार मेरे दिमाग में एक और प्रश्न दिखाई देते हैं। उदाहरण के लिएनेस्टेड कक्षाओं का उपयोग कहां और कैसे करें?

मेरे पास बोर्ड क्लास है, शॉर्टकास्टल, लॉन्गकास्टल, एनपैसेंट, प्रोमोटे और पायन्स जैसे कि Pawn, Queen, Rook, नाइट इत्यादि। तो यह स्पष्ट है कि बोर्ड कक्षाएं टुकड़ा वर्गों को तुरंत चालू करेंगी और टुकड़े वर्ग कक्षाओं को स्थानांतरित करेंगे। एक अच्छे डिजाइन के लिए, चाल वर्ग को बढ़ावा देना बंदूक के घोंसले को होना चाहिए क्योंकि केवल पंख खुद को बढ़ावा दे सकते हैं। शॉर्ट और लंबे कास्टल्स को राजा का घोंसला होना चाहिए क्योंकि केवल राजा के पास इस प्रकार की चाल हो सकती है।

सभी टुकड़े वर्गों को बोर्ड कक्षा में रखने की कोशिश करना अच्छा डिजाइन नहीं दिख रहा है क्योंकि 8-9 कक्षा बोर्ड कक्षा के अंदर होगी और यह वास्तव में परेशान होगी कि एक बोर्ड क्लास फ़ाइल बहुत बड़ी और शायद ही पठनीय होगी। मैं प्रत्येक को रखना पसंद करता हूं एक और फाइल में टुकड़ा वर्ग। अच्छा है कि हम आंशिक बोर्ड क्लास बना सकते हैं लेकिन अभी भी यह परेशान नहीं है 8-9 आंशिक बोर्ड क्लास फाइल प्रत्येक टुकड़ा वर्ग रखेगी? क्या उन्हें नेस्टेड नहीं करना बेहतर है? टुकड़े के बारे में वही एक और आंशिक टुकड़ा फ़ाइल सिर्फ एक और मूव प्रकार वर्ग के लिए बनाएँ? अगर नेस्टेड क्लास सिर्फ छोटी जगह लेता है तो यह कोई समस्या नहीं होगी लेकिन अगर इसमें कई तरीके हैं?

उत्तर

11

मुझे लगता है कि आप नेस्टेड कक्षाओं के साथ बहुत उदार हैं। नेस्टेड प्रकारों के लिए this डिज़ाइन दिशानिर्देश देखें।

नेस्टेड प्रकार का प्रयोग न करें तो निम्न बात कर रहे हैं:

  • प्रकार ग्राहक कोड से instantiated किया जाना चाहिए। यदि किसी प्रकार के पास कन्स्ट्रक्टर है, तो शायद इसे घोंसला नहीं होना चाहिए। इस दिशानिर्देश के पीछे तर्क यह है कि यदि एक नेस्टेड प्रकार तत्काल किया जा सकता है, तो यह इंगित करता है कि इस प्रकार लाइब्रेरी में स्वयं का स्थान है। आप बाहरी प्रकार का उपयोग कर बना सकते हैं, इसका उपयोग कर सकते हैं और के बिना इसे नष्ट कर सकते हैं। इसलिए, यह घोंसला नहीं होना चाहिए। बाहरी प्रकार के बाहरी प्रकार के संबंध में बाहरी प्रकार के के बाहर एक आंतरिक प्रकार व्यापक रूप से पुन: उपयोग नहीं किया जाना चाहिए।
  • प्रकार के संदर्भ आमतौर पर क्लाइंट कोड में घोषित किए गए हैं।

टुकड़े बोर्ड से संबंधित हो सकते हैं (सदस्य के रूप में टुकड़ा संग्रह?) लेकिन इसके बिना सह-अस्तित्व में हो सकता है। आप शायद बोर्डों (विषयों आदि) के बिना बोर्डों का पुन: उपयोग करना चाहते हैं और बोर्ड के बिना टुकड़े का पुन: उपयोग करना (पद आदि)।

2

मूल वर्ग के निजी सदस्य अगली कक्षा के तरीकों तक पहुंच योग्य हैं।

अगला श्रेणी व्यापक दायरे के बिना जटिलता को कम करने की अनुमति देती है।

0

यदि आप वास्तव में, वास्तव में सोचते हैं कि नेस्टेड कक्षाएं आपके डिजाइन के लिए समझ में आती हैं (टिम श्मेल्टर की टिप्पणियां देखें) लेकिन महसूस करें कि फ़ाइल का आकार बहुत बड़ा है, आंशिक कक्षाओं का उपयोग नेस्टेड क्लास डिफेंस को अपनी फाइलों में विभाजित करने के लिए ठीक है। या यदि नेस्टेड कक्षाएं अपने आप पर काफी छोटी हैं लेकिन उनमें से बड़ी संख्या में हैं, तो सभी नेस्टेड कक्षाओं को एक आंशिक फ़ाइल में रखें।

अभिभावक।सीएस:

public partial class Parent 
{ 
    void SomeMethod() 
    { 
     Nested1 n1 = new Nested1(); 
     Nested2 n2 = new Nested2(); 
    } 
} 

Nested.cs:

public partial class Parent 
{ 
    private class Nested1 
    { 

    } 
    private class Nested2 
    { 

    } 
} 
1

एक अच्छा डिजाइन के लिए, इस कदम वर्ग को बढ़ावा देना प्यादा की नेस्ट किया जाना चाहिए, क्योंकि केवल मोहरे ही प्रचार कर सकते हैं।

मैं वास्तव में सहमत नहीं हूं। सिर्फ इसलिए कि आप घोंसला वर्गों का मतलब यह नहीं है कि आपको चाहिए। खुद से पूछें कि आप इन वर्गों को घोंसले से क्या लाभ प्राप्त कर रहे हैं।

+0

आप इस डिजाइन के साथ गलतियों की संभावनाओं को सीमित करते हैं। अन्य टुकड़ों में से कोई भी इस तरह की चाल नहीं बना सकता है, यहां तक ​​कि गलत तरीके से। यह डिज़ाइन इसे नहीं देता है। क्या मैं गलत हूं? – Freshblood

+0

गहरा घोंसले वर्ग अपने दायरे को सीमित करते हैं (जो कुछ परिदृश्यों में सहायक वास्तुशिल्प बाधा हो सकता है), लेकिन आप अपनी परियोजना में बहुत जटिलता ले रहे हैं। मैं "सबसे आसान चीज जो काम कर सकती है" करने की सलाह देना चाहूंगा और फिर आवश्यकता होने पर एक और जटिल डिजाइन को फिर से काम कर रहा हूं। बाद में, यदि आप कुछ कक्षाओं को तत्काल से हटाया जा सकता है, तो आप अलग-अलग विधानसभाओं में अपना समाधान तोड़ सकते हैं ("कक्षा पुस्तकालय" परियोजनाओं को बनाकर)। शुभकामनाएं! =) –

0

नेस्टेड कक्षाओं में उनकी जगह होती है लेकिन काम करने में भ्रमित हो सकती है। मुझे एक वेबपेज मिला जो दिखाता है कि http://www.virtualsecrets.com/graph-api-json-facebook-handler.html पर दीवार पोस्टों के फेसबुक के जेएसओएन-आउटपुट प्राप्त करने के लिए कुछ नेट क्लास का उपयोग कैसे किया जाता है। यहां दिलचस्प बात यह है कि कक्षाएं कक्षाओं के अंदर अन्य कक्षाओं के अंदर घोंसला होती हैं - इसलिए यह किया जा सकता है, बस थोड़ा जटिल :)

+0

जहां तक ​​मैं समझता हूं कि यह आलेख नेस्टेड कक्षाओं के बारे में नहीं है, यह केवल घोंसला वाली वस्तुओं है। यह बिल्कुल अलग है। – Freshblood

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