Creo que esto se basa principalmente en la opinión, pero de todos modos pondré mi 2p.
La forma en que siempre lo he hecho es preguntándome, ¿cuál es la cantidad mínima de conocimiento que mi código necesita para hacer lo que se supone que debe hacer?
Si mi código solo usa código de Other team's library
, entonces solo lo incluiré Other team's library
como una dependencia.
Si mi código también usa código de Third-party library
, entonces lo incluiré también.
Digamos que tenía las siguientes clases de My Library
, Other Library
y Third-party Library
(voy a utilizar Java para el código de ejemplo)
package mylibrary;
import otherlibrary.Bar;
public class Foo {
public void doFoo() {
Bar bar = new Bar();
bar.doBar();
}
}
En el Other Library
package otherlibrary;
import thirdparty.Baz;
public class Bar {
public void doBar() {
Baz baz = new Baz();
baz.doSomething();
}
}
En el Third-party library
package thirdparty;
public class Baz {
public void doBaz() {
System.out.println("baz");
}
}
Debido a que mi código Foo
solo depende del código de otherlibrary
, eso es todo lo que incluiría, porque eso es todo lo que me importa. No me importa cómo otherlibrary.Bar#doBar
hace lo que hace, solo quiero que lo haga.
Sin embargo, si cambiamos el otherlibrary.Bar#doBar
para aceptar un Baz
para hacer algo con, como
public void doBar(Baz baz) {
baz.doBaz();
}
Entonces necesitaría cambiar mylibrary.Foo#doFoo
a algo como
public void doFoo() {
Bar bar = new Bar();
Baz baz = new Baz();
bar.doBar(baz);
}
Debido a que ahora estoy interesado en cómo Bar#doBar
va a hacer lo suyo, y mi código necesita saber Baz
para hacer lo que quiero que haga, debo ser explícito sobre las bibliotecas que incluyo.
Si mi código debe saber sobre cosas dentro de la thirdparty
biblioteca, entonces debo incluirlo como una dependencia.
Aunque quizás el autor de Bar
debería esconder más de esos detalles, así que no necesito incluir la thirdparty
biblioteca ...
thirdyparty
versión 4 y necesito laotherlibrary
versión 3. ¿Qué hacen ustedes al respecto?