Điều này chủ yếu dựa trên quan điểm tôi nghĩ, nhưng dù sao tôi cũng sẽ đưa vào 2p của mình.
Cách mà tôi luôn làm là bằng cách tự hỏi bản thân mình, lượng kiến thức tối thiểu mà mã của tôi cần phải làm là phải làm gì?
Nếu mã của tôi chỉ sử dụng mã từ Other team's library, thì tôi sẽ chỉ bao gồm Other team's librarynhư một phụ thuộc.
Nếu mã của tôi cũng sử dụng mã từ Third-party library, thì tôi cũng sẽ bao gồm nó.
Hãy nói rằng tôi đã có các lớp học sau đây từ My Library, Other Libraryvà Third-party Library(tôi sẽ sử dụng Java cho mã ví dụ)
package mylibrary;
import otherlibrary.Bar;
public class Foo {
public void doFoo() {
Bar bar = new Bar();
bar.doBar();
}
}
bên trong Other Library
package otherlibrary;
import thirdparty.Baz;
public class Bar {
public void doBar() {
Baz baz = new Baz();
baz.doSomething();
}
}
bên trong Third-party library
package thirdparty;
public class Baz {
public void doBaz() {
System.out.println("baz");
}
}
Bởi vì mã của tôi Foochỉ phụ thuộc vào mã từ otherlibrary, đó là tất cả những gì tôi sẽ đưa vào, bởi vì đó là tất cả những gì tôi quan tâm. Tôi không quan tâm làm otherlibrary.Bar#doBarbất cứ điều gì nó làm, tôi chỉ muốn nó làm điều đó.
Tuy nhiên, nếu chúng tôi thay đổi otherlibrary.Bar#doBarđể chấp nhận Bazlàm một cái gì đó với, như
public void doBar(Baz baz) {
baz.doBaz();
}
Sau đó tôi sẽ cần phải thay đổi mylibrary.Foo#doFoothành một cái gì đó như
public void doFoo() {
Bar bar = new Bar();
Baz baz = new Baz();
bar.doBar(baz);
}
Bởi vì bây giờ tôi quan tâm đến việc Bar#doBarsẽ thực hiện công việc của nó như thế nào và mã của tôi cần biết về Bazviệc thực hiện những gì tôi muốn nó làm, tôi cần phải rõ ràng về các thư viện tôi bao gồm.
Nếu mã của tôi phải biết về các thứ trong thirdpartythư viện, thì tôi phải bao gồm nó như một phần phụ thuộc.
Mặc dù có lẽ tác giả Barnên che giấu nhiều chi tiết hơn nên tôi không cần đưa thirdpartythư viện ...
thirdypartyphiên bản 4 vàotherlibrarycần phiên bản 3. Bạn sẽ làm gì với nó?