Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Micilini Roll

Estrutura Switch + Abstração de Classe

Recommended Posts

Olá pessoal, estive seguindo alguns exemplos do livro chamado "Codigo Limpo" e me deparei com uma pequena duvida!

 

Mais especificamente na pagina 38 ele diz que as estruturas switch elas são grandes e violam algumas regras do design patterns:

public function TipoDePagamentoRealizar($pay){

switch($pay){
case: PAYPAL
....
case: PAGSEGURO
....
case: VISA 

}

}

E que eu teria a mesma quantidade ilimitada de funções que teriam a mesma estrutura, como por exemplo: TiposDeComissionamentos(), TiposDeProcessamento() e por ai vai... A solução proposta foi:

 

 

É inserir uma estrutura switch no fundo de uma abstract factory, e jamais deixar que alguem a veja. a factory usará o switch para criar instancias apropriadas de Cliente e as funções como TipoDePagamentos(), TiposDeComissionamentos(), TiposDeProcessamento() serão enviadas de uma forma poliformica atraves da interface Cliente.

 

Para testar isso resolvi fazer um pequeno teste:

abstract class ClasseAbstrataDeCliente{

public function TiposDePagamentos($pay) {
        return $this->getTipoDePagamentoRealizar($pay);
}

public function TiposDeComissionamentos($pay) {
        return $this->getTipoDeComissionamentos($pay);
}

public function TiposDeProcessamento($pay) {
        return $this->getTipoDeProcessamentos($pay);
}

private function getTipoDePagamentoRealizar($pay){

switch($pay){
case: PAYPAL
......
}

}

private function getTipoDeComissionamentos($pay){

switch($pay){
case: Dinheiro
......
}

}

private function getTipoDeProcessamento($pay){

switch($pay){
case: GateWay
......
}

} 

} 

class Cliente extends ClasseAbstrataDeCliente{

 ...... 

}

$classe1 = new Cliente;
$classe1->TiposDePagamentos("PayPal");
$classe1->TiposDeComissionamento("Cartao");
$classe1->TiposDePagamentos("GateWay");

Seria isso? ou fiz alguma coisa errada? Pois acredito que ali eu estaria escondendo os switchs case em no fundo de classes abstratas não?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.