Anderson Vinicius
Uma classe não deve depender de métodos que ela não usa. Isso é o que chamamos de Princípio de Segregação de Interfaces, ou ISP.
Pode-se pensar sobre coesão em vários níveis diferentes. Por exemplo, o que seria uma interface coesa? Uma interface coesa é aquela que também só possui uma única responsabilidade.
“Os clientes não devem ser forçados a implementar interfaces que eles não usam.”
<?php
interface GatewayPayment {
public function pay();
public function cancel();
}
interface Donation {
public function donate();
}
Foi criado uma interface mais específica para doações, pois nem todos os gateways possuem essa funcionalidade.
Caso esse método existisse na interface GatewayPayment iria obrigar os clientes a implementarem sem possui esse recurso no gateway.
<?php
class PagueSeguro implements GatewayPayment, Donation
{
public function pay()
{
// call payment
}
public function cancel()
{
// call cancel payment
}
public function donate()
{
// call donate
}
}
class PagarMe implements GatewayPayment
{
public function pay()
{
// call payment
}
public function cancel()
{
// call cancel payment
}
}