ठीक है जैसे कि कोड इंगित करते हैं कि कोड बहुत अच्छा नहीं है क्योंकि आप कोड को एक विशिष्ट पदानुक्रम में लॉक कर रहे हैं। यह समस्या डीबगिंग पेश कर सकता है, और इसे पढ़ना अच्छा नहीं है, लेकिन मुख्य बिंदु वह कोड है जो एक कार्य लेता है, कुछ फ़ोल्डर चीज़ प्राप्त करने के लिए ट्रैवर्सिंग के बारे में बहुत कुछ जानता है। डोनट्स के लिए डॉलर, कोई मध्य में कुछ डालना चाहता है। (सभी कार्य एक कार्य सूची में हैं, आदि)
अंग पर बाहर जाना, क्या ये सभी वर्ग एक ही चीज़ के लिए विशेष नाम हैं? यानी वे पदानुक्रमित हैं, लेकिन प्रत्येक स्तर में कुछ अतिरिक्त गुण हो सकते हैं?
तो, एक अलग कोण से, मैं एक enum और एक इंटरफ़ेस को सरल बनाने जा रहा हूं, जहां बच्चे कक्षाएं अनुरोध की गई चीज़ नहीं हैं तो श्रृंखला वर्ग का प्रतिनिधि बनती है। तर्क के लिए, मैं उन्हें फ़ोल्डर्स कह रहा हूं।
enum FolderType { ActionPlan, ClientFile, Client, etc }
interface IFolder
{
IFolder FindTypeViaParent(FolderType folderType)
}
और प्रत्येक वर्ग कि IFolder लागू करता है शायद सिर्फ
IFolder FindTypeViaParent(FolderType folderType)
{
if(myFolderType == folderType)
return this;
if(parent == null)
return null;
IFolder parentIFolder = (IFolder)parent;
return parentIFolder.FindTypeViaParent(folderType)
}
एक बदलाव IFolder इंटरफेस बनाने के लिए है करता है:
interface IFolder
{
FolderType FolderType { get; }
IFolder Parent { get; }
}
यह आपको ट्रेवर्सल कोड बाह्यरूप की अनुमति देता है। हालांकि यह कक्षाओं से दूर नियंत्रण लेता है (शायद उनके पास एकाधिक माता-पिता हैं) और कार्यान्वयन का खुलासा करता है। अच्छा और बुरा।
[ramblings]
एक नज़र में यह एक बहुत महंगा स्थापित करने के लिए पदानुक्रम प्रतीत होता है। क्या मुझे हर बार टॉप-डाउन को तुरंत चालू करने की ज़रूरत है? यानी अगर कुछ को सिर्फ एक कार्य की ज़रूरत है, तो क्या आपको उन सभी बैक-पॉइंटर्स को यह सुनिश्चित करने के लिए सबकुछ नीचे-नीचे करना होगा? भले ही यह आलसी लोड हो, क्या मुझे जड़ पाने के लिए पदानुक्रम चलने की ज़रूरत है?
फिर फिर, पदानुक्रम वास्तव में वस्तु पहचान का एक हिस्सा है? यदि ऐसा नहीं है, तो शायद आप पदानुक्रम को एन-आरी पेड़ के रूप में बाहरी कर सकते हैं।
एक साइड-नोट के रूप में, आप कुल मिलाकर डीडीडी (डोमेन संचालित डिजाइन) अवधारणा पर विचार करना चाहेंगे और यह निर्धारित कर सकते हैं कि प्रमुख खिलाड़ी कौन हैं। परम मालिक वस्तु क्या है जो जिम्मेदार है? जैसे एक कार के पहिये एक डिजाइन में जो एक कार मॉडल करता है, पहियों भी वस्तुएं हैं, लेकिन वे कार के स्वामित्व में हैं।
शायद यह आपके लिए काम करता है, शायद यह नहीं करता है। जैसे मैंने कहा, यह अंधेरे में सिर्फ एक शॉट है।
हालांकि ध्यान दें कि इसे ओवरडोन किया जा सकता है। कॉलिंग a.getName()। बराबर ("blah") आवश्यक रूप से अपने परियोजना टारपीडो के लिए जा रहा नहीं है सिर्फ इसलिए कि आप एक पर एक compareNameTo() विधि नहीं लिखा है ... –
यह सब के बारे में हो जाता है()। कॉलिंग प्राप्त करें()। बराबर() ठीक है क्योंकि केवल 1 मिलता है। प्राप्त करना()। प्राप्त करें()। बराबर() अलार्म घंटी ट्रिगर करने के लिए शुरू होना चाहिए। – Quibblesome
लेकिन गरीब डेमेटर को कभी भी अंधेरे से लागू नहीं किया जाना चाहिए! हालांकि, प्राप्त होने पर सहमत हैं। –