क्या यह सकरात्मक निर्भरता पर भरोसा करने या उन्हें स्पष्ट रूप से घोषित करने के लिए बेहतर है?


11

मेरे पास इस तरह की एक परियोजना संरचना है:

My Project
  - Other Team's Project
     -Third Party Dependency

My ProjectOther Team's Projectकार्य करने की आवश्यकता है, और दोनों My Projectऔर कार्य करने की Other Team's Projectआवश्यकता Third Party Dependencyहै। हम इनका प्रबंधन करने के लिए एक निर्भरता प्रबंधन प्रणाली का उपयोग कर रहे हैं।

एक डिजाइन के नजरिए से, क्या इस My Projectपर भरोसा करना बेहतर है Third Party Dependency? या यह दोनों के लिए बेहतर है My Projectऔर Other Team's Projectदोनों स्पष्ट रूप से घोषित करते हैं कि वे उपयोग करते हैं Third Party Dependency?

कुछ अन्य बातें:

  • दोनों परियोजनाओं के एक ही संस्करण की आवश्यकता है Third Party Dependency
  • यह गारंटी नहीं है कि अगर Other Team's Projectअद्यतन My Projectकिया जाता है तो यह सुनिश्चित करने के लिए परीक्षण किया जाएगा कि कुछ भी नहीं टूटता है, क्योंकि वे विभिन्न टीमों द्वारा प्रबंधित किए जाते हैं।

जवाबों:


11

कल्पना कीजिए कि अगर दूसरी टीम अपने प्रोजेक्ट को थर्ड पार्टी लाइब्रेरी का इस्तेमाल किए बिना ही करने का फैसला करती है और वे अपनी निर्भरता को दूर कर देते हैं। या वे एक ही काम करने के लिए दूसरे थर्ड पार्टी लाइब्रेरी में जाते हैं। क्या आपका कोड अभी भी काम करेगा?

यदि यह आपका कोड केवल दूसरी परियोजना पर निर्भर करता है, यदि आपका कोड तीसरे पक्ष के पुस्तकालय पर भी निर्भर नहीं करता है।

दोनों परियोजनाओं के एक ही संस्करण की आवश्यकता है Third Party Dependency

यह एक मजबूत संकेतक है कि आपकी परियोजना सीधे तीसरे पक्ष के पुस्तकालय पर भी निर्भर करती है।


16

यह ज्यादातर राय-आधारित है जो मुझे लगता है, लेकिन मैं अपने 2p में वैसे भी डालूंगा।

जिस तरह से मैं हमेशा किया है यह अपने आप पूछ है, क्या ज्ञान मेरे कोड की न्यूनतम राशि है की जरूरत है इसके क्या करना चाहिए क्या करना है करने के लिए?

यदि मेरा कोड केवल से कोड का उपयोग करता है Other team's library, तो मैं केवल Other team's libraryएक निर्भरता के रूप में शामिल करूंगा ।

यदि मेरा कोड भी कोड का उपयोग करता है Third-party library, तो मैं इसे भी शामिल करूंगा।

चलो कहते हैं कि मैं से निम्नलिखित वर्गों था My Library, Other Libraryहै, और Third-party Library(मैं उदाहरण के कोड के लिए जावा का उपयोग करेंगे)

package mylibrary;

import otherlibrary.Bar;

public class Foo {

    public void doFoo() {
        Bar bar = new Bar();
        bar.doBar();
    }
}

में Other Library

package otherlibrary;

import thirdparty.Baz;

public class Bar {

    public void doBar() {
        Baz baz = new Baz();
        baz.doSomething();
    }
}

में Third-party library

package thirdparty;

public class Baz {

    public void doBaz() {
        System.out.println("baz");
    }
}

क्योंकि मेरा कोड Fooकेवल कोड पर निर्भर करता है otherlibrary, यही वह सब है, जिसमें मैं शामिल होता हूं, क्योंकि मुझे इसकी परवाह है। मुझे परवाह नहीं है कि otherlibrary.Bar#doBarयह कैसे करता है, मैं बस यह करना चाहता हूं।

यदि फिर भी, हमने कुछ के साथ ऐसा करने के otherlibrary.Bar#doBarलिए स्वीकार करने के लिए बदल दिया Baz, जैसे

public void doBar(Baz baz) {
    baz.doBaz();
}

मुझे तब mylibrary.Foo#doFooकुछ बदलने की जरूरत होगी

public void doFoo() {
    Bar bar = new Bar();
    Baz baz = new Baz();

    bar.doBar(baz);
}

क्योंकि मुझे अब इस बात में दिलचस्पी है कि Bar#doBarइसका काम कैसे हो रहा है, और मेरे कोड को यह जानने की आवश्यकताBaz है कि मैं क्या करना चाहता हूं, मुझे उन पुस्तकालयों के बारे में स्पष्ट होना चाहिए, जिनमें मैं शामिल हूं।

यदि मेरे कोड कोthirdparty लाइब्रेरी के भीतर सामान के बारे में पता होना चाहिए , तो मुझे इसे एक निर्भरता के रूप में शामिल करना होगा

यद्यपि शायद लेखक को Barउन विवरणों को अधिक से अधिक छिपाना चाहिए, इसलिए मुझे thirdpartyपुस्तकालय को शामिल करने की आवश्यकता नहीं है ...


1
मैं इसके लिए सबकुछ हूं। लेकिन निर्भरता नरक हमेशा एक समस्या है अगर, उदाहरण के लिए, मैं thirdypartyसंस्करण 4 से शुरू करता हूं और otherlibraryसंस्करण 3 की आवश्यकता है। आप लोग इसके बारे में क्या करते हैं?
थियागो अर्रिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.