Comme le principe de ségrégation d'interface suggère qu'aucun client ne devrait être forcé de dépendre de méthodes qu'il n'utilise pas, donc un client ne devrait pas implémenter une méthode vide pour ses méthodes d'interface, sinon cette méthode d'interface devrait être placée dans une autre interface.
Mais qu'en est-il des méthodes concrètes? Dois-je séparer les méthodes que tous les clients n'utiliseraient pas? Considérez la classe suivante:
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;
}
}
dans le code ci-dessus, CarShop n'utilise pas du tout la méthode isQualityPass () dans Car, si je sépare isQualityPass () dans une nouvelle classe:
public class CheckCarQualityPass{
public boolean isQualityPass(Car car){
}
}
afin de réduire le couplage de CarShop? Parce que je pense qu'une fois si isQualityPass () a besoin d'une dépendance supplémentaire, par exemple:
public boolean isQualityPass(){
HttpClient client=...
}
CarShop dépendrait de HttpClient même s'il n'utilise jamais HttpClient en fait. Ma question est donc la suivante: selon le principe de la ségrégation d'interfaces, dois-je séparer des méthodes concrètes que tous les clients n'utiliseraient pas, afin que ces méthodes ne dépendent du client que lorsque le client l'utilise réellement, afin de réduire le couplage?
Car
classe que vous ne voulez pas que (tous) les utilisateurs connaissent, créez (plus d'une) interface que la Car
classe implémente et qui déclare uniquement les méthodes utiles dans le contexte des interfaces.