インターフェース分離の原則は、クライアントが使用しないメソッドに依存することを強制されるべきではないことを示唆しているので、クライアントはそのインターフェースメソッドに空のメソッドを実装すべきではありません。
しかし、具体的な方法はどうですか?すべてのクライアントが使用するわけではない方法を分離する必要がありますか?次のクラスを考えてみましょう:
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;
}
}
上記のコードでは、CarShopはisQualityPass()を新しいクラスに分離する必要がある場合、CarでisQualityPass()メソッドをまったく使用しません。
public class CheckCarQualityPass{
public boolean isQualityPass(Car car){
}
}
CarShopの結合を減らすために?isQualityPass()が追加の依存関係を必要とするかどうか、一度考えると、
public boolean isQualityPass(){
HttpClient client=...
}
CarShopは、実際にはHttpClientを使用しない場合でも、HttpClientに依存します。だから私の質問は:インターフェース分離の原則に従って、すべてのクライアントが使用するわけではない具体的なメソッドを分離して、結合を減らすために、クライアントが実際に使用する場合にのみクライアントに依存するようにすべきですか?
Car
(すべての)ユーザーに知られたくないクラスのメソッドがある場合、クラスが実装する(複数の)インターフェースを作成Car
し、インターフェースコンテキストで有用なメソッドのみを宣言します。