मेरे पास प्रोजेक्ट ए और प्रोजेक्ट बी है। वे विभिन्न प्रोग्रामिंग भाषाओं में हो सकते हैं। प्रोजेक्ट ए प्रोटो फाइलों का उपयोग करके एक एपीआई को उजागर करता है, जो प्रोजेक्ट बी प्रोग्रामिंग भाषा में एपीआई उत्पन्न करने के लिए उपयोग करेगा जो प्रोजेक्ट बी उपयोग करता है।

लेकिन प्रोटो फाइलें कहाँ संग्रहीत हैं? प्रोटोबफ के साथ ऐसा करने का पारंपरिक तरीका क्या है? क्या आप प्रोटो फाइल फाइलों से उत्पन्न फाइलों को संस्करण नियंत्रण में जोड़ते हैं?

यदि आप प्रोजेक्ट ए और प्रोजेक्ट बी दोनों में प्रोटो फाइलों की एक प्रति संग्रहीत करते हैं, तो यदि प्रोजेक्ट ए अपना एपीआई बदलता है, तो प्रोजेक्ट बी को उन्हें कॉपी करना होगा। यह दृष्टिकोण बहुत अच्छा काम नहीं करता है जब प्रोजेक्ट ए द्वारा उजागर एपीआई का उपयोग कर कई प्रोजेक्ट होते हैं।

आप उपरोक्त समस्या को हल कर सकते हैं यदि आपके पास एक अलग प्रोजेक्ट, प्रोजेक्ट सी है, जिसमें साझा प्रोटो फाइलें हैं। लेकिन फिर आप प्रोजेक्ट ए और प्रोजेक्ट बी से प्रोटो फाइल कैसे बनाते हैं?

14
stwykd 16 मई 2019, 12:10

2 जवाब

सबसे बढ़िया उत्तर

मैं एक अलग परियोजना में .proto फाइलों को संग्रहित करने का सुझाव दूंगा। ये आपकी दो परियोजनाओं के बीच अनुबंध हैं, और जरूरी नहीं कि ये किसी एक के "स्वामित्व" हों। उन्हें एक अलग परियोजना में संग्रहीत करना दोनों परियोजना सदस्यों के लिए फाइलों में परिवर्तन पर बातचीत करने के लिए तटस्थ आधार प्रदान करता है - उदाहरण के लिए पुल/मर्ज अनुरोध प्रक्रिया के माध्यम से जहां समीक्षकों के रूप में कार्य करने वाली दोनों परियोजनाओं के सदस्य हो सकते हैं।

प्रोटो फाइलों से कोड जनरेट करने के लिए, मैं शायद उन परियोजनाओं में ऐसा करूंगा जिनकी उन्हें आवश्यकता है। तो आपके मामले में प्रोजेक्ट सी में केवल .proto फाइलें होंगी, और प्रोजेक्ट ए और बी .proto फाइलों को खींचेंगे और उन्हें आवश्यक कोड उत्पन्न करेंगे। मुझे लगता है कि इसे इस तरह से होना चाहिए क्योंकि यह प्रोजेक्ट ए और बी है जो प्रोटोबफ जेनरेट कोड का उपभोग कर रहे हैं। यदि कोड प्रोजेक्ट C में उत्पन्न किया गया था, तो प्रोजेक्ट A और B को अभी भी इसका उपयोग करने में सक्षम होने के लिए उत्पन्न कोड को खींचना होगा, और चूंकि प्रोजेक्ट C को तकनीकी रूप से A और B से अलग किया गया है, इसलिए यह स्पष्ट नहीं होगा कि किन भाषाओं की आवश्यकता होगी। उत्पन्न - वे सभी? बस 2 की जरूरत है?

प्रोजेक्ट सी बनाकर आप एक ऐसा स्थान बना रहे हैं जो संभावित रूप से अन्य परियोजनाओं के लिए अधिक .proto फाइलें रख सकता है। भविष्य के बारे में सोचते हुए आपके पास कई प्रोजेक्ट हो सकते हैं जो सामान्य आधार संदेश प्रकार साझा करते हैं। कई इंटरकनेक्टेड परियोजनाओं के साथ एक आर्किटेक्चर का प्रबंधन करने के लिए संदेश परिभाषाओं को आजमाने और समेकित करने के लिए यह बहुत समझ में आता है, और यह मुश्किल/असंभव होगा यदि प्रत्येक प्रोजेक्ट अपनी परिभाषा बनाए रखता है, और भी बदतर (जैसा कि आप कहते हैं) यदि डुप्लिकेट प्रतियां हैं। उन्हें एक स्थान पर संग्रहीत करने से नई परियोजनाओं को मौजूदा परिभाषाओं को लेने और उनका विस्तार करने की अनुमति मिलती है (विकासवादी दिशानिर्देशों के भीतर), और परिभाषाओं के सेट के प्रबंधन और रखरखाव पर अधिक कठोरता की अनुमति देता है, उदा। अनुभवी समीक्षकों का एक समूह यह सुनिश्चित करता है कि सब कुछ लगातार और समझदारी से किया जा रहा है - चाहे वह मॉडलिंग, नेमस्पेसिंग या वर्जनिंग के नजरिए से हो।

14
JGC 10 मार्च 2020, 14:26

मैं @JGC के शानदार उत्तर से एक छोटा सा विचलन पेश करूंगा। देखें https://www.bugsnag.com/blog/libraries-for-grpc -सेवाएं अधिक विवरण के लिए (अनिवार्य तुलना के बजाय दृष्टिकोण के सार के लिए)।

जब आप अपनी प्रोटो फाइलों को एक अलग भंडार में रखते हैं, तो उसी भंडार में क्लाइंट कोड भी उत्पन्न हो सकता है। उदाहरण के लिए, गोलांग में एक क्लाइंट के साथ, उत्पन्न कोड (जो गोलांग भी होगा) को आयात किया जा सकता है, भले ही वह एक अलग रिपॉजिटरी में हो। मतलब प्रोजेक्ट a और/या b उस जेनरेट कोड को प्रोजेक्ट c से आसानी से इम्पोर्ट कर सकते हैं।

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

कल्पना कीजिए कि प्रोजेक्ट c में एक प्रोटो का उपयोग गो फ़ाइल बनाने के लिए किया जाता है, और इसे किसी अन्य गो प्रोजेक्ट (प्रोजेक्ट ए) में आयात किया जा सकता है। और प्रोजेक्ट सी एक जेनरेट की गई जावास्क्रिप्ट फ़ाइल (या जो कुछ भी) को एनपीएम रजिस्ट्री में प्रकाशित करता है। मुझे नहीं पता कि डार्ट अभी तक कैसे काम करता है, लेकिन कल्पना करें कि इसने आपके स्पंदन ऐप के लिए क्लाइंट कोड भी तैयार किया है और आपने इसे प्रोजेक्ट सी से भी पकड़ लिया है।

आईओएस ऐप गड़बड़ है, लेकिन शीर्षक वाला प्रश्न ढूंढें

प्रोटो फाइल्स को कैसे मेंटेन करें

अच्छी व्याख्या के लिए

3
Yehuda Makarov 24 मई 2020, 15:53