विभिन्न परियोजनाओं के बीच कक्षाएं या इंटरफेस साझा करना


17

मैं SO या यहाँ कुछ उत्तरों की तलाश में था, लेकिन बिना किसी परिणाम के, इसीलिए मैं आपसे पूछूंगा।

मान लें कि मेरे पास दो अलग-अलग परियोजनाएं हैं - उदाहरण के लिए सर्वर का हिस्सा और एक ऐप का क्लाइंट हिस्सा। मैं अपना खुद का हिस्सा विकसित कर रहा हूं, जबकि मेरा दोस्त दूसरा बना रहा है। लेकिन हम दोनों की तरह कुछ आम इंटरफेस का उपयोग करना चाहिए Userया AccountInfoया ChangableAccount... जो कुछ भी क्रम में एक संगतता सुनिश्चित करने के। उदाहरण के लिए यदि कोई ग्राहक सर्वर पर उपयोगकर्ता डेटा भेजता है, तो सर्वर को उसी वर्ग पर काम करना चाहिए। इंटरफेस आदि के साथ भी ऐसा ही है। यदि आम इंटरफेस में कोई बदलाव होता है, तो दोनों परियोजनाओं को नई स्थिति में अपना कोड समायोजित करना चाहिए।

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

आप अन्य क्या उपाय सुझाएंगे? पेशेवर ऐप्स में ऐसी समस्याओं का समाधान कैसे किया जाता है?


1
आपको नियंत्रण रखना चाहिए कि आप कुछ साझा करते हैं या नहीं। क्या आप कह रहे हैं कि आप क्लाइंट और सर्वर प्रोजेक्ट के लिए संस्करण नियंत्रण का उपयोग नहीं कर रहे हैं ? यदि हां, तो तुरंत उपाय करें।
सेबस्टियन रेड

जवाबों:


15

एक अतिरिक्त परियोजना बनाएं जिसमें सभी सामान्य चीजें परिभाषित हों

पुन: प्रयोज्य भागों को साझा करने के लिए यह बिल्कुल पहला कदम है - और इसका आसान भाग। अधिक चुनौतीपूर्ण हिस्सा यह तय करना है कि साझा प्रोजेक्ट का उपयोग कर रहे दो प्रोजेक्ट्स में स्वतंत्र रिलीज़ साइकल (या नहीं) होगा, और यदि यह संभव है कि "प्रोजेक्ट A" आपके साझा किए गए lib के संस्करण 1.0 का उपयोग करता है, जबकि प्रोजेक्ट B का उपयोग करता है संस्करण 2.0 एक ही समय में

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

यदि, हालांकि, आप उस स्थिति को रोकना चाहते हैं , तो आपको एक संयुक्त विकास के साथ "प्रोजेक्ट ए", "प्रोजेक्ट बी" और एक आम परियोजना के रूप में आपकी देयता का प्रबंधन करना चाहिए, निर्माण और रिलीज की प्रक्रिया। यह साझा परिदृश्य के सामान्य इंटरफ़ेस को पहले परिदृश्य की तुलना में बहुत अधिक और अक्सर बदलने की अनुमति देगा। और आपको लाइब्रेरी फ़ाइल नाम में मावेन या संस्करण संख्या जैसी कोई चीज़ नहीं चाहिए होगी। लेकिन व्यापार यह है कि ए और बी को स्वतंत्र रूप से विकसित नहीं किया जा सकता है।


13

आपका समाधान सही है। साझा कोड को किसी अन्य प्रोजेक्ट में रखें जो अपनी स्वयं की JAR फ़ाइल बनाता है, और इसे दोनों प्रोजेक्ट में उपयोग करें। JAR फ़ाइल का निर्माण करते समय, आप संस्करण को नाम में शामिल करना चाह सकते हैं, जैसे डेबियन शैली में;

libmyproject-shared-1.0.jar

यह संस्करण की परेशानी को नहीं रोकता है, लेकिन इसे मदद करनी चाहिए। मैंने कभी मावेन का उपयोग नहीं किया है, लेकिन मैं समझता हूं कि यह इस स्थिति में मदद कर सकता है।


2

एक अतिरिक्त परियोजना बनाएं जिसमें सभी सामान्य चीजें परिभाषित हों

ठीक यही तरीका है कि .नेट आपसे यह करने की उम्मीद करता है।

इन ऑब्जेक्ट्स को तीसरी असेंबली में सार करें, और दोनों प्रोजेक्ट्स से इसे देखें। मेरा सुझाव है कि इंटरफेस के रूप में ऐसा कर रहा है, जो क्लीनर है, लेकिन ...

क्रमांकन के लिए देखें:

  • एक ही तरीका है कि मैं सीधे तौर पर दो कार्यक्रमों के बीच वस्तुओं को क्रमबद्ध / deserialise कर सकता हूं (वास्तव में यह कुछ समय पहले फ्रेमवर्क 2.0 का उपयोग करके था) क्लाइंट और सर्वर मशीनों दोनों पर "साझा" असेंबली को ग्लोबल असेंबली कैश में स्थापित करना था। यदि विधानसभा प्रत्येक परियोजना के लिए "स्थानीय" थी, तो फ्रेमवर्क ने उन्हें असतत प्रकार के रूप में देखा और एक में दूसरे को क्रमबद्ध करने से इनकार कर दिया।
  • और [डी] धारावाहिक वस्तुओं को इंटरफेस के रूप में टाइप किया जाता है जो एक "चुनौती" का एक सा है। मूल, गैर-इंटरफ़ेस प्रकार सीरियलाइज़ेशन "पाइप" के माध्यम से "इसे" बनाने के लिए प्रतीत नहीं हुआ, इसलिए रिसीवर को पता नहीं था कि आने वाली धारा से "निर्माण" करने के लिए कौन सा ठोस प्रकार है।

1

जैसा कि दूसरों ने सुझाव दिया है, आपकी विचार प्रक्रिया सटीक है। पेशेवर रूप से, अधिकांश इन निर्भरताओं को कुशलतापूर्वक प्रबंधित करने के लिए मावेन या ग्रैडल जैसे कुछ का उपयोग करेंगे ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.