Penso che sia per lo più basato sull'opinione pubblica, ma inserirò comunque il mio 2p.
Il modo in cui l'ho sempre fatto è chiedermelo, qual è la quantità minima di conoscenza che il mio codice ha bisogno di dover fare ciò che dovrebbe fare?
Se il mio codice utilizza solo il codice da Other team's library
, includerò solo Other team's library
come dipendenza.
Se il mio codice anche utilizza il codice da Third-party library
, allora includerò anche quello.
Diciamo che ho avuto le seguenti classi da My Library
, Other Library
e Third-party Library
(Userò Java per il codice di esempio)
package mylibrary;
import otherlibrary.Bar;
public class Foo {
public void doFoo() {
Bar bar = new Bar();
bar.doBar();
}
}
In Other Library
package otherlibrary;
import thirdparty.Baz;
public class Bar {
public void doBar() {
Baz baz = new Baz();
baz.doSomething();
}
}
In Third-party library
package thirdparty;
public class Baz {
public void doBaz() {
System.out.println("baz");
}
}
Perché il mio codice in Foo
dipende solo dal codice da otherlibrary
, questo è tutto ciò che includerei, perché è tutto ciò che mi interessa. Non mi interessa come otherlibrary.Bar#doBar
fa tutto ciò che fa, voglio solo farlo.
Se tuttavia, abbiamo modificato otherlibrary.Bar#doBar
per accettare un Baz
con cui fare qualcosa, come
public void doBar(Baz baz) {
baz.doBaz();
}
Dovrei quindi cambiare mylibrary.Foo#doFoo
in qualcosa di simile
public void doFoo() {
Bar bar = new Bar();
Baz baz = new Baz();
bar.doBar(baz);
}
Perché ora sono interessato a come Bar#doBar
sta per fare la sua cosa, e il mio codice ha bisogno di sapere su Baz
per fare ciò che voglio che faccia, ho bisogno di essere esplicito sulle librerie che includo.
Se il mio codice deve sapere di elementi all'interno della libreria thirdparty
, allora I deve includerlo come dipendenza.
Anche se forse l'autore di Bar
dovrebbe nascondere più dettagli, quindi non è necessario includere la libreria thirdparty
...