Estrutura Switch + Abstração de Classe
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?
Discussão (2)
Carregando comentários...