यह बहुत मूल सामग्री है, लेकिन यहां जाता है। मुझे लगता है कि मैं कभी भी अपने आप से सहमत नहीं हूं कि जिस तरह से मैं बड़े वर्गों को छोटे से विभाजित करता हूं चीजों को और अधिक बनाए रखने योग्य या कम रखरखाव योग्य बनाता है। मैं डिजाइन पैटर्न से परिचित हूं, हालांकि विस्तार से नहीं, और ऑब्जेक्ट उन्मुख डिजाइन की अवधारणाओं के साथ भी। सभी फैंसी नियमों और दिशानिर्देशों को एक तरफ, मैं अपने दिमाग को एक बहुत ही सरल, नमूना परिदृश्य के साथ खोने के संबंध में चुनने के लिए देख रहा हूं। अनिवार्य रूप से इस तरह के साथ: "... यह डिज़ाइन इसे और अधिक कठिन बना देगा", आदि ... सभी चीजें जिन्हें मैं अनुभव की कमी की वजह से उम्मीद नहीं करता हूं।कोड को घटकों में कैसे विभाजित करें ... बड़ी कक्षाएं? छोटी कक्षाएं?
कहें कि आपको किसी निश्चित प्रकार की फ़ाइल को संसाधित करने के लिए मूल "फ़ाइल रीडर/फ़ाइल लेखक" शैली वर्ग लिखने की आवश्यकता है। आइए फ़ाइल को YadaKungFoo फ़ाइल पर कॉल करें। YadaKungFoo फ़ाइलों की सामग्री अनिवार्य रूप से आईएनआई फ़ाइलों के समान है, लेकिन सूक्ष्म मतभेदों के साथ।
वर्गों और मूल्यों के होते हैं:
[Sections]
Kung,Foo
Panda, Kongo
[AnotherSection]
Yada,Yada,Yada
Subtle,Difference,Here,Yes
[Dependencies]
PreProcess,SomeStuffToPreDo
PreProcess,MoreStuff
PostProcess,AfterEight
PostProcess,TheEndIsNear
PostProcess,TheEnd
ठीक है, तो यह 3 बुनियादी वर्गों उपज कर सकते हैं: एक toString() ओवरराइड करने के लिए साथ
public class YadaKungFooFile
public class YadaKungFooFileSection
public class YadaKungFooFileSectionValue
दो उत्तरार्द्ध वर्ग हैं अनिवार्य रूप से केवल डाटा संरचनाओं कुछ जेनेरिक सूचियों का उपयोग करके संग्रहीत मूल्यों की एक स्ट्रिंग सूची थूकें। यह YadaKungFooFile कार्यक्षमता कार्यक्षमता को लागू करने के लिए पर्याप्त है।
तो समय के साथ YadaYadaFile बढ़ने लगती है। एक्सएमएल इत्यादि सहित विभिन्न प्रारूपों में सहेजने के लिए कई ओवरलोड, और फ़ाइल 800 लाइनों या उससे भी आगे बढ़ने लगती है। अब वास्तविक प्रश्न: हम YadaKungFoo फ़ाइल की सामग्री को सत्यापित करने के लिए एक सुविधा जोड़ना चाहते हैं। पहली बात जो दिमाग में आती है वह स्पष्ट रूप से जोड़ना है:
var yada = new YadaKungFooFile("C:\Path");
var res = yada .Validate()
और हम कर चुके हैं (हम उस विधि को निर्माता से भी कॉल कर सकते हैं)। मुसीबत मान्यता काफी जटिल है, और वर्ग बहुत बड़ी बना देता है, तो हम इस तरह एक नया वर्ग बनाने का निर्णय:
var yada = new YadaKungFooFile("C:\Path");
var validator = new YadaKungFooFileValidator(yada);
var result = validator.Validate();
अब इस नमूने जाहिर बहुत सरल, तुच्छ और तुच्छ है। शायद ऊपर दो तरीकों में से या तो बहुत ज्यादा फर्क नहीं है, लेकिन क्या मुझे पसंद नहीं है यह है:
- YadaKungFooFileValidator वर्ग और YadaKungFooFile वर्ग बहुत दृढ़ता से इस डिजाइन से मिलकर हो रहे हैं । ऐसा लगता है कि एक वर्ग में बदलाव आया है, दूसरे में बदलावों की संभावना है।
- मुझे पता है कि "वैलिडेटर", "कंट्रोलर", "प्रबंधक" आदि जैसे वाक्यांश ... एक वर्ग को इंगित करते हैं जो अन्य वस्तुओं की स्थिति से संबंधित है, जो इसके "अपने व्यवसाय" के विपरीत है, और इसलिए अलगाव का उल्लंघन करता है चिंता सिद्धांतों और संदेश भेजने का।
सब मुझे लगता है कि मुझे लगता है कि मैं क्यों एक डिजाइन बुरा है के सभी पहलुओं को किन परिस्थितियों में यह वास्तव में कोई फर्क नहीं पड़ता है और क्या चिंता अधिक वजन किया जाता है समझने के लिए अनुभव की जरूरत नहीं है के सभी: छोटे कक्षाएं या अधिक समेकित कक्षाएं। वे विरोधाभासी आवश्यकताओं की प्रतीत होते हैं, लेकिन शायद मैं गलत हूं।शायद वैधकर्ता वर्ग एक समग्र वस्तु होना चाहिए?
अनिवार्य रूप से मैं उपरोक्त डिज़ाइन के परिणामस्वरूप संभावित लाभ/समस्याओं पर टिप्पणियों के लिए पूछ रहा हूं। अलग-अलग क्या किया जा सकता है? (बेस फ़ाइल वैलिडेटर क्लास, फाइल वैलिडेटर इंटरफेस, आदि .. आप इसे नाम दें)। समय के साथ बढ़ते हुए YadaKungFooFile कार्यक्षमता के बारे में सोचें।
"मुझे नहीं लगता कि कक्षा का आकार चिंता का विषय है।" सिद्धांत में मैं सहमत होने का लुत्फ उठा रहा हूं। प्रैक्टिस में, मैंने कभी भी 2000 से अधिक लाइनों वाली कक्षा नहीं देखी है जिसे मुझे पसंद आया। – PeterAllenWebb
@ पीटर एलेन वेब ... मैं सहमत हूं, लेकिन एलओसी की संख्या निर्णायक कारक नहीं होनी चाहिए, बल्कि कक्षा के अर्थशास्त्र को यह तय करने में मदद करनी चाहिए कि क्या कक्षा एक चीज़ या एक से अधिक चीज़ों से संबंधित है। हकीकत में ज्यादातर वर्ग छोटे होने जा रहे हैं। –
@ विंसेन्ट रामधनी एलओएल गंध का वास्तव में अच्छा संकेतक है, मेरा सामान्य नियम यह है कि यदि एक विधि में 100 से अधिक एलओसी हैं तो यह सुनिश्चित नहीं है कि सिद्ध मासूम और कक्षाओं के लिए 500 एलओसी –