Decoupled आर्किटेक्चर बनाने के लिए संकुल (रत्न, अंडे, आदि) का उपयोग करना


10

मुख्य मुद्दा

अच्छा समर्थन सबसे आधुनिक प्रोग्रामिंग प्लेटफार्मों पैकेज प्रबंधन (लगता है के लिए है देखकर gem, npm, pipइतनी के रूप में बढ़ावा देने और एक शिथिल युग्मित वास्तुकला बनाने के लिए, आदि), यह मतलब है एक आवेदन या प्रणाली आंतरिक रूप से विकसित संकुल से बना जा डिजाइन करने के लिए?

उदाहरण

इसका एक उदाहरण डेटाबेस एक्सेस के साथ-साथ प्रमाणीकरण और सिस्टम के अन्य घटकों के लिए पैकेज बनाना होगा। ये, ज़ाहिर है, बाहरी पैकेज का भी उपयोग करते हैं। फिर, आपका सिस्टम इन पैकेजों का आयात करता है और उनका उपयोग करता है - बजाय इसके कोड को अपने कोड बेस में शामिल करने के लिए।

विचार

मेरे लिए, ऐसा लगता है कि यह कोड डिकॉउलिंग को बढ़ावा देगा और बनाए रखने में मदद करेगा, लगभग एक वेब-आधारित-बनाम-डेस्कटॉप-एप्लिकेशन तरह से (अपडेट लगभग स्वचालित रूप से लागू होते हैं, एकल कार्यक्षमता के लिए एकल कोड आधार)।

क्या यह एक तर्कसंगत और समझदार डिजाइन अवधारणा जैसा लगता है? क्या यह वास्तव में आज अनुप्रयोगों को संरचित करने के मानक तरीके के रूप में उपयोग किया जाता है?

जवाबों:


12

मैं दो बार इस तरह की परियोजनाओं में शामिल रहा हूं (दोनों .NET के साथ nuget का उपयोग करते हुए), और मैं कहूंगा कि संतुलन पर यह एक अच्छा विचार है। लेकिन आपका माइलेज अलग हो सकता है।

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

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

और, यदि आप मेरे जैसे कुछ भी हैं, तो आप अपने बग ढूंढने की प्रक्रिया से एप्लिकेशन की संपूर्ण परतों को हटाने के लिए जल्दी से अपने पैकेज का उपयोग करने वाले परीक्षण एप्लिकेशन लिखना शुरू कर देंगे। और वह, अपने आप में, लागत से अधिक हो सकता है।


अद्भुत इनपुट है। सामान्य तौर पर, सभी चीजें संतुलित होनी चाहिए, और मुझे पसंद है कि आपकी टिप्पणी उन पंक्तियों पर कैसे रहती है। यह सुनकर बहुत अच्छा लगा कि आपको लगता है कि यह अधिक मामलों में अच्छा काम नहीं करता है ... और समस्याओं की उपस्थिति वैसे भी एक स्थिर है। मैं परीक्षण क्षुधा :) के बारे में आपकी टिप प्यार करता हूँ :)। +1।
जुआन कार्लोस कोटो

1
मैं जोड़ूंगा कि बहुत सारी परियोजनाएं हैं जो * निक्स दुनिया में भी ऐसा करती हैं। आपके पास अक्सर विकास के संसाधनों से आदि से सामने के छोरों से अलग पुस्तकालय हैं,
डेविड काउडन

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

3

यह एक अच्छा विचार है, सभी में है। आपको एक आंतरिक पैकेज रिपॉजिटरी (आमतौर पर जावा दुनिया में "विरूपण साक्ष्य भंडार", या पायथन दुनिया में "पीपीआई सर्वर") स्थापित करने के बारे में सोचने की आवश्यकता होगी, ताकि आप उन पैकेजों को वहां रखें जो आप नहीं चाहते हैं या ' ओपन सोर्स के रूप में टी रिलीज।

जैसा कि @pdr ने उल्लेख किया है, अपने स्वयं के निर्भरता नरक के लिए तैयार रहें , जहां कुछ पैकेज में बदलाव के लिए पहले दूसरे पैकेज में एक और बदलाव की आवश्यकता होती है, और इसका मतलब है कि कोड की एक पंक्ति को न केवल बदलना, बल्कि इसका परीक्षण करना, संभवतः परिवर्तनों को स्वीकार करना, एक रिलीज का निर्माण, और उपरोक्त पैकेज रिपॉजिटरी में रिलीज को अपलोड करना। और फिर जो आप बदलना चाहते थे उसे बदलना।

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

इसके अलावा, आपको जो मुख्य लाभ मिलेगा वह यह है कि आपके ऐप्स (कई) निर्भरता से अछूते हैं, इसलिए आप उन्हें बिना दर्द के विनिमय कर सकते हैं।


बहुत बढ़िया टिप। मैंने एक commonपैकेज को विकल्प के रूप में नहीं माना , लेकिन, जैसा कि आप कहते हैं, मैं इसे भविष्य में "उचित" निर्णय बनते हुए देख सकता था। मेरा इरादा कोड के बजाय घटकों की रेखाओं के साथ अधिक था - इसलिए आदर्श रूप से आपके पास कोड के बहुत सारे टुकड़े नहीं होने चाहिए, जो अलग-अलग पैकेजों में एक ही काम करते हैं क्योंकि वे अलग-अलग काम करने के लिए हैं। मुझे लगता है कि अगर पैकेज के बीच समानताएं हैं, तो उस तरह की पुनरावृत्ति अच्छे प्रोग्रामिंग सिद्धांतों का उल्लंघन नहीं करेगी, क्योंकि परियोजनाएं अलग-अलग हैं।
जुआन कार्लोस कोटो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.