हमारे पेशे में, अपरिचित कोडबेस पर काम करना आम बात है। ऐसा हर बार होता है जब कोई एक नई परियोजना में शामिल होता है या यहां तक कि बड़े लोगों में पहले से अछूते हिस्से पर काम करने की आवश्यकता होती है।
यह घटना एक बग को ठीक करने वाले डेवलपर तक सीमित नहीं है; यह एक समाधान वास्तुकार हो सकता है जिसे अपने खाली समय में एक GitHub मुद्दे पर काम करने वाली एक नई सुविधा या OpenSource योगदानकर्ता को डिज़ाइन करना हो। इसलिए, मैं यह वर्णन करना चाहता हूं कि मैं स्थिति को कैसे देखता हूं ताकि यह दूसरों को लाभ पहुंचा सके।
अपने बिंदु को स्पष्ट करने के लिए, मैं ओपन सोर्स प्रोजेक्ट पर एक नई सुविधा का अनुरोध करने वाले एक सामान्य गिटहब मुद्दे का उपयोग करूंगा।
हेज़ेलकास्ट के लिए काम करते समय, मैंने हैकथॉन पर काम करने के लिए तथाकथित "अच्छे पहले मुद्दों" को नियमित रूप से स्कैन किया। मैं इस तरह का हैकाथॉन कभी नहीं चला सकता था, लेकिन वह बात से परे है। मेरा विचार ओपन सोर्स में योगदान करने में रुचि रखने वाले लोगों को कोड बेस से परिचित होने में मदद करना था।
उस समय, मुझे यह दिलचस्प मुद्दा मिला:
GetQuiet ऑपरेशन के लिए समर्थन जोड़ें http://ehcache.org/apidocs/net/sf/ehcache/Cache.html#getQuiet(java.lang.Object) ?
विचार यह है कि इसे छुए बिना प्रवेश प्राप्त करने में सक्षम होना चाहिए, जिसका अर्थ है कि यह अंतिम एक्सेस किए गए टाइम स्टैम्प को अपडेट नहीं करेगा।
इसके पीछे का उपयोग मामला उस कुंजी के बेदखली को बदले बिना कुंजी के अस्तित्व की निगरानी करने में सक्षम होना है।
एक OpenSource योगदानकर्ता के रूप में, मैं कार्य के लिए कैसे संपर्क करूँगा?
प्रलेखन एक नई परियोजना शुरू करने के लिए पहला कदम है। एक नियमित परियोजना पर, प्रलेखन शायद गायब, अधूरा, या आंशिक रूप से (यदि पूरी तरह से नहीं) भ्रामक होगा; हैकाथॉन में, इसे विस्तार से पढ़ने के लिए समय बहुत कम हो सकता है।
सफल ओपन सोर्स प्रोजेक्ट्स में सामान्य रूप से अच्छे दस्तावेज होते हैं I हालांकि, प्रलेखन मुख्य रूप से उपयोगकर्ताओं की ओर उन्मुख है, शायद ही कभी डेवलपर्स की ओर। यहां तक कि जब यह मामला है, इस बात की संभावना कम है कि दस्तावेज समस्या को संबोधित करते हैं।
इस कारण से, मेरा प्रवेश बिंदु आरेख बनाना है। ध्यान दें कि हालांकि कुछ उपकरण इंजीनियर कोड को उल्टा कर सकते हैं और स्वचालित रूप से चित्र बना सकते हैं, मैं उन्हें उद्देश्य पर उपयोग नहीं करता हूं। मैन्युअल रूप से आरेख बनाने से स्वचालित रूप से जेनरेट किए गए आरेख पर कई लाभ होते हैं:
आइए मुद्दे के लिए कोड के लिए आरेख बनाएं। सबसे पहले, हम अपने पसंदीदा आईडीई में इसे खोलने के लिए रेपो को स्थानीय रूप से क्लोन करेंगे; एकमात्र आवश्यक सुविधा यह है कि जब कोई विधि कॉल पर क्लिक करता है, तो उसे विधि के लिए निर्देशित किया जाता है।
आरेख के लिए, मुझे पुराने जमाने का कहें, लेकिन मैं अभी भी दो कारणों से यूएमएल अनुक्रम आरेखों का पक्ष लेता हूं:
आगे की हलचल के बिना, यहाँ यह है:
आरेख तैयार करने के बाद, हम बहुत जल्दी पता लगा सकते हैं कि समस्या कहाँ है:
public abstract class AbstractCacheRecordStore<R extends CacheRecord, CRM extends SampleableCacheRecordMap<Data, R>> implements ICacheRecordStore, EvictionListener<Data, R> { protected long onRecordAccess(Data key, R record, ExpiryPolicy expiryPolicy, long now) { record.setAccessTime(now); // 1 record.incrementAccessHit(); return updateAccessDuration(key, record, expiryPolicy, now); } //... }
DefaultRecordStore
Record
पढ़ता है, जो अंतिम एक्सेस समय के अपडेट को ट्रिगर करता है।
समस्या को ठीक करना इस पोस्ट के दायरे से बाहर है। इसमें सर्वोत्तम समाधान विकसित करने के लिए समग्र डिजाइन से अधिक परिचित लोगों से बात करना शामिल है। हैकाथॉन में एक अच्छा तरीका यह है कि सबसे पहले कम से कम दो विकल्पों की पेशकश की जाए और उनके संबंधित ट्रेड-ऑफ का दस्तावेजीकरण किया जाए।
टूलींग के लिए, बहुत सारे विकल्प उपलब्ध हैं। मेरी वरीयताएँ प्लांटयूएमएल में जाती हैं:
किसी की सटीक तकनीकी भूमिका की परवाह किए बिना मौजूदा कोडबेस को समझना एक महत्वपूर्ण कौशल है। प्रलेखन के अतिरिक्त लाभ के साथ एक आरेख बनाना इस लक्ष्य की ओर एक लंबा रास्ता तय करता है।
मुझे यूएमएल आरेख पसंद हैं क्योंकि मैं उनसे परिचित हूं, और वे साझा शब्दार्थ प्रदान करते हैं।
इसलिए, यदि आप एक कोडबेस को बेहतर ढंग से समझना चाहते हैं, तो आपको इसके कोड को पढ़ने के अलावा और भी बहुत कुछ चाहिए; आपको आरेख बनाने की आवश्यकता है।
मूल रूप से 14 मई, 2023 को ए जावा गीक में प्रकाशित हुआ