मैं काफी बड़े उत्पाद पर काम करता हूं। यह विकास में रहा है क्योंकि नेट 1.0 अभी भी एक काम प्रगतिशील था और इसलिए इसमें बहुत खराब गुणवत्ता कोड है और इसे यूनिट परीक्षणों के साथ दिमाग में नहीं लिखा गया था। अब हम गुणवत्ता को बेहतर बनाने और प्रत्येक सुविधा और बग फिक्स के लिए परीक्षण लागू करने की कोशिश कर रहे हैं। अब हम सबसे बड़ी समस्याओं में से एक निर्भरता नरक और भगवान वस्तुओं है। विशेष रूप से एक ईश्वर वस्तु है जो खराब है: Session
। असल में, कार्यक्रम के वर्तमान सत्र से संबंधित कुछ भी इस वस्तु में है। कुछ अन्य भगवान वस्तुओं भी हैं।ईश्वर वस्तुओं को तोड़ने के लिए इंटरफेस विरासत?
वैसे भी, हमने इस ईश्वर को उनमें से एक इंटरफ़ेस निकालने के लिए रिशेर्पर का उपयोग करके "मजाकिया" बना दिया है। हालांकि, यह अभी भी परीक्षण करना मुश्किल बनाता है क्योंकि अधिकांश समय आपको उस कोड को देखना पड़ता है जिसे आप लिखते हैं कि वास्तव में 100 अलग-अलग तरीकों और उचितताओं से बाहर निकलने की ज़रूरत है।
बस इस वर्ग को विभाजित करना अभी सवाल से बाहर है क्योंकि सचमुच सैकड़ों हैं यदि इस वर्ग के हजारों संदर्भ नहीं हैं।
क्योंकि मेरे पास एक इंटरफ़ेस है (और इंटरफ़ेस का उपयोग करने के लिए लगभग सभी कोड को दोबारा प्रतिक्रिया दी गई है) हालांकि, मेरे पास एक दिलचस्प विचार था। क्या होगा यदि मैंने ISession
इंटरफ़ेस को अन्य इंटरफेस से प्राप्त किया है।
, अगर हम कुछ इस तरह था:
interface IBar
{
string Baz{get;set;}
}
interface IFoo
{
string Biz{get;set;}
}
interface ISession: IFoo, IBar
{
}
इस तरह, मौजूदा कोड ISession का उपयोग कर अद्यतन करने की नहीं होती, और न ही वास्तविक क्रियान्वयन अद्यतन किया जाना है। लेकिन, नए कोड में हम लिखते हैं और रिफैक्टर करते हैं, हम अधिक दानेदार IFoo या IBar इंटरफेस का उपयोग कर सकते हैं, लेकिन एक ISession में पास कर सकते हैं।
और अंत में, मैं यह देखने के रूप में शायद यह आसान अंत में वास्तविक ISession और सत्र भगवान इंटरफ़ेस/वस्तु
अब आप को तोड़ने के लिए बना रही है। क्या यह इन ईश्वर वस्तुओं के खिलाफ परीक्षण करने और अंततः उन्हें तोड़ने का एक अच्छा तरीका है? क्या यह एक दस्तावेजी दृष्टिकोण और/या डिजाइन पैटर्न है? क्या आपने कभी ऐसा कुछ किया है?
+1: यह एक चरण-दर-चरण रिफैक्टरिंग करने के लिए उचित तरीके की तरह लगता है। –
यदि आपने इसे चेक नहीं किया है, [लीगेसी कोड के साथ प्रभावी ढंग से कार्य करना] (http://amzn.com/B005OYHF0A) माइकल फेदर द्वारा मूल्यवान साबित हो सकता है। इसमें परीक्षण के तहत इस तरह की परियोजना लाने में आपकी सहायता करने के लिए कई रणनीतियां शामिल हैं। उनमें से कई स्पष्ट हैं, लेकिन प्रिंट में उन्हें देखकर आपको धक्का देने और इसे करने का विश्वास मिलता है। –
@ एंथनी पेगम यह वास्तव में – Earlz