Geçişli bağımlılıklara güvenmek veya açıkça beyan etmek daha mı iyi?


11

Ben böyle bir proje yapısı var:

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

My ProjectOther Team's Projectişlevini gerektirir ve her ikisi de My Projectve işlevini Other Team's Projectgerektirir Third Party Dependency. Bunları yönetmek için bir bağımlılık yönetim sistemi kullanıyoruz.

Tasarım açısından bakıldığında, My Projectgeçici olarak güvenmek daha mı iyi Third Party Dependency? Yoksa her ikisi için My Projectve Other Team's Projecther ikisinin de kullandıklarını açıkça beyan etmek daha Third Party Dependencymı iyi?

Birkaç şey daha:

  • Her iki projenin de aynı sürümüne sahip olması gerekir Third Party Dependency.
  • Other Team's ProjectGüncellenirse My Project, hiçbir şeyin kırılmamasını sağlamak için test edilecek olan garanti edilmez , çünkü farklı ekipler tarafından yönetilirler.

Yanıtlar:


11

Diğer ekip , üçüncü taraf kütüphanesini kullanmadan aynı şeyi yapma projesini yeniden düzenlerse ve bağımlılıklarını ortadan kaldırırsa ne olacağını hayal edin . Ya da aynı şeyi yapmak için başka bir üçüncü taraf kütüphanesine geçerler. Kodunuz hala çalışır mı?

Bunu yaparsa, kodunuz yalnızca diğer projeye bağlıdır, değilse kodunuz üçüncü taraf kitaplığına da bağlıdır.

Her iki projenin de aynı sürümüne sahip olması gerekir Third Party Dependency.

Bu, projenizin doğrudan üçüncü taraf kütüphanesine de bağlı olduğunu gösteren güçlü bir göstergedir.


16

Bu çoğunlukla fikir tabanlı olduğunu düşünüyorum, ama yine de benim 2p koyacağım.

Her zaman yaptığım gibi, kendime, kodumun yapması gereken şeyi yapmak için sahip olması gereken minimum bilgi miktarı nedir?

Kodum yalnızca gelen kodu kullanıyorsa Other team's library, yalnızca Other team's librarybağımlılık olarak dahil edeceğim .

Kodum da kodu kullanıyorsa Third-party library, ben de dahil edeceğim.

Diyelim ben şu sınıfları vardı ki My Library, Other Libraryve Third-party Library(ı örnek kodu için Java kullanacağız)

package mylibrary;

import otherlibrary.Bar;

public class Foo {

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

İçinde Other Library

package otherlibrary;

import thirdparty.Baz;

public class Bar {

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

İçinde Third-party library

package thirdparty;

public class Baz {

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

Çünkü benim kod Foosadece gelen kod bağlıdır, otherlibraryben dahil tüm budur, çünkü tüm umurumda bu. Ne yaparsa yapsın umrumda değil otherlibrary.Bar#doBar, sadece yapmasını istiyorum.

Ancak, biz değişti otherlibrary.Bar#doBarbir kabul etmek Bazgibi bir ilgisi

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

Sonra mylibrary.Foo#doFooböyle bir şeye geçmem gerekecek

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

    bar.doBar(baz);
}

Şimdi nasıl ilgilenen ediyorum Çünkü Bar#doBaronun şey için gidiyor ve benim kod ihtiyacı hakkında bilmek Bazbunu yapmak istediğini yapmak, ben dahil kütüphaneler konusunda açık olmak gerekir.

Benim kod Eğer gerekir içindeki şeyleri gösterebilir thirdpartykütüphane, o zaman gerekir bir bağımlılık olarak dahil edin.

Belki de yazarı Barbu detaylardan daha fazlasını gizlemesine rağmen , thirdpartykütüphaneyi dahil etmeme gerek yok ...


1
Ben bunun için varım. Eğer bağımlılık cehennem her zaman bir sorun, örneğin, ben thirdypartysürüm 4 ile başlar ve sürüm 3 otherlibrarygerekiyorsa, millet bu konuda ne yapıyorsun?
Thiago Arrais
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.