В основному, на мою думку, це ґрунтується на думці, але я все-таки вкладу свій 2p.
Я завжди робив це, запитуючи себе, який мінімальний обсяг знань повинен мати мій код для того, щоб його робити?
Якщо мій код використовує лише код від Other team's library, я включатиму лише Other team's libraryяк залежність.
Якщо в моєму коді також використовується код Third-party library, я його також включатиму.
Скажімо , я мав такі класи з My Library, Other Libraryі Third-party Library(я буду використовувати Java для коду прикладу)
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бібліотеку ...
thirdypartyверсії 4 іotherlibraryпотребує версії 3. Що ви робите з цього приводу?