Como o princípio de segregação de interface sugere que nenhum cliente deve ser forçado a depender dos métodos que não usa, portanto, um cliente não deve implementar um método vazio para seus métodos de interface, caso contrário, esse método de interface deve ser colocado em outra interface.
Mas e os métodos concretos? Devo separar os métodos que nem todos os clientes usariam? Considere a seguinte classe:
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;
}
}
no código acima, o CarShop não usa o método isQualityPass () em Car, devo separar isQualityPass () em uma nova classe:
public class CheckCarQualityPass{
public boolean isQualityPass(Car car){
}
}
para reduzir o acoplamento do CarShop? Porque acho que uma vez se isQualityPass () precisa de dependência extra, por exemplo:
public boolean isQualityPass(){
HttpClient client=...
}
O CarShop dependeria do HttpClient, mesmo que ele nunca use o HttpClient. Portanto, minha pergunta é: de acordo com o princípio de segregação de interface, devo separar métodos concretos que nem todos os clientes usariam, para que esses métodos dependam do cliente somente quando o cliente realmente usar, para reduzir o acoplamento?
Car
classe que não deseja que todos (os) usuários criem, crie (mais de uma) interface que a Car
classe implemente e que declare apenas métodos úteis no contexto de interfaces.