01/09/2017 - PHP
Bir interface hiçbir zaman genel amaçlı bir interface olmamalıdır. Belirli bir konuya adanmış olan bir interface, her zaman genel amaçlara adanmış olan bir interfaceden daha iyidir.
# VIOLATION
interface PlayerInterface
{
public function run();
public function jump();
public function rebound();
}
class Basketball implements PlayerInterface
{
public function run() {}
public function jump() {}
public function rebound() {}
}
class Football implements PlayerInterface
{
public function run() {}
public function jump() {}
public function rebound() {}
}
Yukarıda gördüğümüz gibi, her ne kadar kendisiyle alakası olmasa da, Football
class rebound
methodunu kullanmak zorunda bırakılmıştır. Bu bir prensip ihlalidir.
# REFACTORED
interface PlayerInterface
{
public function run();
public function jump();
}
interface BasketballPlayerInterface
{
public function rebound();
}
class Basketball implements PlayerInterface, BasketballPlayerInterface
{
public function run() {}
public function jump() {}
public function rebound() {}
}
class Football implements PlayerInterface
{
public function run() {}
public function jump() {}
}
Yukarıda gördüğümüz gibi, rebound
methodunu BasketballPlayerInterface
interface içine monte ettik ve bunu sadece Basketball
classın kullanmasını sağladık. Football
classımız artık kendisiyle alakasız olan methodları kullanmaya zorlanmayacaktır.