Vì nguyên tắc phân tách giao diện cho thấy không nên buộc khách hàng phụ thuộc vào các phương thức mà nó không sử dụng, do đó, khách hàng không nên thực hiện một phương thức trống cho các phương thức giao diện của nó, nếu không thì nên đưa phương thức giao diện này vào giao diện khác.
Nhưng làm thế nào về phương pháp cụ thể? Tôi có nên tách các phương thức mà không phải mọi khách hàng sẽ sử dụng? Hãy xem xét các lớp sau:
public class Car{
....
public boolean isQualityPass(){
...
}
public int getTax(){
...
}
public int getCost(){
...
}
}
public class CarShop{
...
public int getCarPrice(int carId){
Car car=carList[carId];
int price=car.getTax() + car.getCost()... (some formula);
return price;
}
}
ở đoạn mã trên, CarShop hoàn toàn không sử dụng phương thức isQualityPass () trong Xe hơi, tôi nên tách isQualityPass () thành một lớp mới:
public class CheckCarQualityPass{
public boolean isQualityPass(Car car){
}
}
để giảm khớp nối của CarShop? Bởi vì tôi nghĩ một lần nếu isQualityPass () cần phụ thuộc thêm, ví dụ:
public boolean isQualityPass(){
HttpClient client=...
}
CarShop sẽ phụ thuộc vào HttpClient ngay cả khi nó không bao giờ sử dụng HttpClient. Vì vậy, câu hỏi của tôi là: theo nguyên tắc phân tách giao diện, tôi có nên tách riêng các phương thức cụ thể mà không phải mọi khách hàng sẽ sử dụng, để các phương thức đó chỉ phụ thuộc vào máy khách khi khách hàng thực sự sử dụng, để giảm khớp nối không?
Car
lớp mà bạn không muốn (tất cả) người dùng biết về thì hãy tạo (nhiều hơn một) giao diện mà Car
lớp thực hiện một phương thức chỉ khai báo các phương thức hữu ích trong ngữ cảnh giao diện.