जब मैं एक आवेदन पत्र बनाने के लिए, मैं आम तौर पर एक स्थिर वर्ग है कि स्थिर तरीकों और गुण है कि मैं समझ नहीं सकता है, जहां कहीं भी डाल करने के लिए होता है पैदा करते हैं।
यह एक विशेष रूप से अच्छा डिजाइन नहीं है, लेकिन उस समय की तरह है: यह मेरे डिजाइन फैसले कि मैं अभी तक बाहर नहीं सोचा का एक पूरा वर्ग स्थानीय बनाना एक जगह देता है। आम तौर पर जब एप्लिकेशन बढ़ता है और रिफैक्टरिंग के माध्यम से परिष्कृत किया जाता है, तो यह स्पष्ट हो जाता है कि इन तरीकों और गुणों को वास्तव में निवास करना चाहिए। दयालुता, रीफैक्टरिंग उपकरण की स्थिति ऐसी है कि ये परिवर्तन आम तौर पर बनाने के लिए असाधारण रूप से दर्दनाक नहीं होते हैं।
मैं इसे दूसरी तरह के कर की कोशिश की है, लेकिन दूसरी तरह के मूल रूप से एक ऑब्जेक्ट मॉडल लागू कर रहा है इससे पहले कि मैं अपने आवेदन ऑब्जेक्ट मॉडल ठीक से डिजाइन करने के लिए के बारे में जानना पर्याप्त है। अगर मैं कि करते हैं, मैं एक औसत दर्जे का समाधान मैं फिर से मिलना है और भविष्य में कुछ बिंदु पर जमीन से पुनर्निर्माण के लिए है के साथ आ समय और ऊर्जा भी पर्याप्त मात्रा में खर्च करते हैं। खैर, ठीक है, अगर मुझे पता है कि मैं इस कोड को दोबारा शुरू करने जा रहा हूं, तो मैं अनावश्यक जटिल वर्गों को डिजाइन करने और बनाने के चरण को कैसे छोड़ सकता हूं जो वास्तव में काम नहीं करते हैं?
उदाहरण के लिए, मैं एक आवेदन है कि कई ग्राहकों द्वारा इस्तेमाल किया जा रहा निर्माण किया है। मुझे बहुत जल्दी पता चला कि मुझे अलग-अलग ग्राहकों के लिए अलग-अलग काम करने की ज़रूरतों को अलग करने का एक तरीका होना चाहिए। मैंने एक स्थिर उपयोगिता विधि बनाई है जिसे मैं प्रोग्राम में किसी भी बिंदु पर कॉल कर सकता हूं जहां मुझे एक अनुकूलित विधि कॉल करने की आवश्यकता है, और इसे मेरी स्थिर कक्षा में फंस गया है।
यह महीनों के लिए ठीक काम करता है। लेकिन वहां एक बिंदु आया जिस पर यह बदसूरत लग रहा था। और इसलिए मैंने इसे अपनी कक्षा में दोबारा करने का फैसला किया।और जब मैं अपने कोड के माध्यम से उन सभी स्थानों को देख रहा था जहां इस विधि को बुलाया जा रहा था, यह बेहद स्पष्ट हो गया कि सभी अनुकूलित विधियों को वास्तव में एक अमूर्त वर्ग के सदस्य होने की आवश्यकता है, ग्राहकों की असेंबली को एक व्युत्पन्न कक्षा में रखने की आवश्यकता है जो सभी अमूर्त तरीकों को लागू करता है, और उसके बाद प्रोग्राम को असेंबली का नाम और इसकी कॉन्फ़िगरेशन से नेमस्पेस प्राप्त करने की आवश्यकता होती है और स्टार्टअप पर कस्टम फीचर्स क्लास का एक उदाहरण बनाते हैं। मेरे लिए अनुकूलित करने के लिए सभी विधियों को ढूंढना वास्तव में आसान था, क्योंकि मुझे बस इतना करना था कि मेरी लोड-ए-कस्टम-फीचर विधि कहां जा रही थी। यह मुझे पूरे कोडबेस के माध्यम से जाने और इस डिजाइन को तर्कसंगत बनाने के लिए दोपहर का बेहतर हिस्सा ले गया, और अंतिम परिणाम वास्तव में लचीला और मजबूत है और सही समस्या हल करता है।
बात यह है कि, जब मैंने पहली बार उस विधि को लागू किया (वास्तव में यह तीन या चार पारस्परिक तरीकों से था), मुझे पता चला कि यह सही जवाब नहीं था। लेकिन मुझे यह तय करने के लिए पर्याप्त जानकारी नहीं थी कि सही जवाब क्या था। इसलिए जब तक सही उत्तर स्पष्ट नहीं हुआ तब तक मैं सबसे सरल गलत जवाब के साथ गया।
स्रोत
2009-10-31 05:53:52
प्रश्न सी # के बारे में है, जावा नहीं। वैसे भी स्ट्रिंग क्लास को सील कर दिया गया है (जावा में अंतिम), दोनों .NET और Java –