Back home

पुरानी प्रणालियों का आधुनिकीकरण सबसे पहले अनुकूलता की सीढ़ी पर ले जाता है

कोपायलट का वास्तव में उपयोगी हिस्सा पर्यावरण, प्रवेश, परीक्षण और सीमा को परत दर परत बाहर निकालना है।

पहले पुरानी व्यवस्था को आधुनिक बनाएं और अनुकूलता की सीढ़ी बनाएं

बीस साल पहले जब मैंने पहली बार एक जावा प्रोजेक्ट खोला, तो पहली चीज़ जो मैंने देखी वह कोड गंध नहीं, बल्कि उम्र की गंध थी। बिल्ड.एक्सएमएल अभी भी है, लेकिन पोम.एक्सएमएल वहां नहीं है; निर्देशिका संरचना पुराने जमाने की है, परीक्षण प्रवेश द्वार भी पुराने जमाने का है, और यहां तक ​​कि “क्या यह चलने योग्य उत्पाद का पुनर्निर्माण कर सकता है” को भी पुन: पुष्टि करने की आवश्यकता है। इस स्तर पर सबसे आम गलती कक्षाओं और तरीकों पर ध्यान केंद्रित करना और इस बात को नजरअंदाज करना है कि जो वास्तव में आधुनिकीकरण को रोकता है वह पर्यावरण और प्रवेश द्वार है।

पुरानी प्रणालियों का आधुनिकीकरण करते समय सबसे पहली बात एक अनुकूलता सीढ़ी का निर्माण करना है। सीढ़ी के आधार में आमतौर पर केवल एक ही चीज़ होती है: पुरानी प्रणाली को पुराने नियमों के भीतर स्थिर रूप से चलाने के लिए, और अधिमानतः समय कैप्सूल के रूप में काम करने के लिए। डॉकर, पुराना जेडीके, पुराने बिल्ड टूल, पुराने टेस्ट कमांड, ये चीजें कच्ची दिखती हैं, लेकिन ये बहुत प्रभावी हैं। जब तक यह आधार सीधा नहीं है, तब तक प्रत्येक बाद का परिवर्तन नए शोर में मिश्रित हो जाएगा: चाहे वह कोड टूटा हुआ हो, या जेवीएम, छवि, आर्किटेक्चर और प्लग-इन टूटा हुआ हो, यह बताना असंभव है।

फिर बारी थी पुल चुनने की. पुल का लक्ष्य बहुत विशिष्ट है: एक छोर पुराने स्रोत कोड से जुड़ा है, और दूसरा छोर नई मशीन से जुड़ा है। यह परियोजना अंततः जावा 8 और ग्रैडल 7.6 पर गिरी, जो दोनों सिरों की बाधाओं पर अटक गई: जावा 17 अब जावा 1.5 के स्रोत कोड को संकलित करने के लिए तैयार नहीं है, और जावा 6 ARM64 के मूल वातावरण में नहीं चल सकता है। यदि पुल गलत है, तो आधुनिकीकरण उपकरण श्रृंखला में अटक जाएगा; यदि पुल सही है, तो बाद के प्रवासन चरण दर चरण आगे बढ़ सकेंगे।

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

java {
    sourceCompatibility = JavaVersion.VERSION_1_5
    targetCompatibility = JavaVersion.VERSION_1_5
}
sourceSets {
    main {
        java {
            srcDirs = ['java']
        }
    }
}
tasks.register('runLegacyTest', JavaExec) {
    mainClass.set(project.findProperty('mainClass'))
    classpath = sourceSets.main.runtimeClasspath
}

इस विन्यास का महत्व पुरानी दुनिया के नियमों को स्पष्ट करना है। पुराने प्रोजेक्टों में सबसे परेशानी वाली बात अक्सर क्षमता की कमी नहीं होती, बल्कि आदतों में क्षमता छिपी होती है। परीक्षण मुख्य() प्रविष्टि के माध्यम से चलाया जाता है, स्रोत कोड को पुरानी निर्देशिका में रखा जाता है, और बिल्ड को चींटी युग में पथ मानते हुए लिखा जाता है। सह-पायलट यहां समय बचा सकता है, लेकिन यह अनुवाद का समय बचाता है, निर्णय का समय नहीं।

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

मैं जिस दृष्टिकोण पर अधिक भरोसा करता हूं वह यह है कि पहले समस्या को चार स्तरों में विभाजित किया जाए: क्या इसे चलाया जा सकता है, क्या इसे संपादित किया जा सकता है, क्या इसका परीक्षण किया जा सकता है, और क्या इसे संशोधित किया जा सकता है। पहला स्तर दृश्य को पुन: प्रस्तुत करना है, दूसरा स्तर पुल का निर्धारण करना है, तीसरा स्तर यह निर्धारित करना है कि पुराने परीक्षण ने क्या बचाया है, और चौथा स्तर वास्तविक रीफैक्टरिंग है। कोपायलट पहले दो स्तरों पर विशेष रूप से उपयोगी है। यह लॉग और निर्देशिका संरचनाओं के बाद भौतिक कार्य के लिए उपयुक्त है, और खंडित सुरागों को एक साथ पढ़ने योग्य मानचित्र में जोड़ने के लिए उपयुक्त है। चौथे स्तर पर, मॉडल को केवल परिवहन और संकेतों के लिए जिम्मेदार होना चाहिए, और लोगों को निर्णय लेने के लिए लोगों पर निर्भर रहना होगा।

पुरानी प्रणाली को आधुनिक बनाने का सबसे मूल्यवान परिणाम उन चीजों के समूह को “काम करना चाहिए” को “उन चीजों में बदलना है जो वास्तव में काम करती हैं और हम जानते हैं कि वे क्यों काम करती हैं।” एक बार जब यह अनुकूलता सीढ़ी स्थापित हो जाती है, तो बाद के निराकरण में एक लय होगी और परिवर्तनों की सीमाएँ होंगी। को-पायलट इस समय अग्रिम पंक्ति में एक सहायक की तरह है, जिसके पास उम्र, प्रवेश और निर्भरता को देखने के लिए टॉर्च है। जो चीज़ वास्तव में दिशा निर्धारित करती है वह पुरानी व्यवस्था के इतिहास का निर्णय है।

FAQ

What to read next

Related

Continue reading

后端 · 2 tags

एजेंट प्रणाली सबसे पहले संदर्भ बजट और सेंसर को मजबूत करती है

टुकड़े: 13 जुलाई में सबसे अधिक ध्यान देने योग्य परिवर्तन यह है कि हार्नेस मॉडल के लिए इनपुट क्लोजिंग करना शुरू कर देता है।

后端 · 2 tags

एजेंट इंजीनियरिंग सबसे पहले संदर्भ और सेंसर को मजबूत करती है

फ़्रैगमेंट्स से: 13 जुलाई, जो हम देखते हैं वह नए मॉडल की क्षमताएं नहीं हैं, बल्कि पहले दैनिक इंजीनियरिंग में प्रवेश करना है।