Đ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 library
như 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 Library
và 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 Foo
chỉ 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#doBar
bấ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 Baz
là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#doFoo
thà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#doBar
sẽ 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ề Baz
việ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 thirdparty
thư 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ả Bar
nên che giấu nhiều chi tiết hơn nên tôi không cần đưa thirdparty
thư viện ...
thirdyparty
phiên bản 4 vàotherlibrary
cần phiên bản 3. Bạn sẽ làm gì với nó?