e fala pessoal nessa aula a gente vai falar sobre o padrão de projeto adapter aqui e esse é um padrão de projeto que faz exatamente o que o nome dele fala ele é um adaptador no caso enquanto eu tiver falando dos slides se você quiser visualizar uma coisa para ficar mais simples para você entender tanta visualizar aqueles adaptadores de tomada não sei se você dá para você que tá isso aqui por exemplo eu tenho uma tomada do meu notebook por exemplo que eu preciso encaixar na tomada daparede ali no caso só que os dois o
plug do meu notebook com o plugue da tomada ali no caso não são compatíveis não que que eu faço eu pego um adaptador coloca no meio do caminho e ligo meu plugue na tomada beleza meu notebook na tomada não é basicamente isso que eu adaptei faz eu aconselho muito que você veja e preste atenção nesse padrão de projeto porque este padrão de projeto é muito utilizado quando você tem alguma coisa de terceiros na sua aplicação algum código legado que se você não quer depender desse código legado o código de terceiro código de terceiro que eu
tô falando é qualquer forma framework you live ou qualquer coisa desse tipo beleza então vamos dar uma olhada na intenção oficial do adaptar o adaptador tem a intenção de converter a interface de uma classe em outra interface esperada pelos clientes o adapter permite que certas classes trabalhem em conjunto pois de outra forma seria impossível por causa das suas interfaces incompatíveis então basicamente isso que eu te falei do adaptador de tomada eu tenho uma tomada no caso eu tenho um plugue de tomada que seria o clube do meu notebook os dois sozinhos não funcionariam então o
que que eu faço eu ponho alguma coisa no meio do caminho que faz a conversão do clube do meu notebook pa tomada que tá na parede e daí eu consigo fazer com que os dois funciona em perfeitamente beleza vamos dar uma olhada sobre o adaptar esse o esse é um padrão de projeto da categoria estrutural que são todos que a gente vai ver agora a gente já viu com poste agora o adapter e a gente vai ver mais alguns um pouco mais para frente nas aulas posteriores à ele faz exatamente o que eu te falei
do adaptador no caso ele faz exatamente a mesma coisa no nosso código é comparado com que eu te falei do adaptador de tomada ali né faz adaptação de um código para outro código no caso que e ela é muito usado para definir limites dentro de camadas da nossa aplicação se você já estudou arquitetura no caso aqui de software você vai entender o que eu tô falando você pode utilizar o adapter para definir limites entre camadas da sua aplicação beleza eu não quero trazer essa complexidade aqui agora mas só para você já colocar sementinha no seu
cérebro o whatsapp é muito usado para definir esses limites tanto dentro de camadas da minha aplicação é de fora da minha aplicação para fora dela como se fosse por ele da minha aplicação para um framework externo como quando eu não quero depender de coisas externas eu utilizo um adaptador no meio do caminho para que o meu código dependa só do meu adapter e não de um framework de terceiro beleza ele também pode ser utilizado para adaptar interfaces de código legado para um novo código às vezes eu não sei se você já leu domingo slim design
do eric evans mas as vezes a gente precisa de uma linguagem às vezes não né sempre é um livro que foca muito em linguagem onipresente no caso aqui né então você deve ter dentro da aplicação uma linguagem que fala sobre o domínio em geral ali no casa é e daí pode ser que você tem um código legado pronto que tenha nome diferente coisa funcionalidades diferente se você quer migrar esse código para o novo código que você tá utilizando então nesse caso você poderia é batendo caso para adaptar o seu código atual para o código legado
no caso ali beleza whatsapp ele é um padrão de projeto que ele tem duas estruturas ele tem a estrutura feita por composição ea estrutura feita por herança múltipla como eu sei que muitas linguagens de programação não suportam a herança múltipla no caso até dá para fazer com interfaces no caso aqui é mais como eu sei que muitas linguagem de programação não suportam herança múltipla e eu prefiro sempre a composição ou em vez de herança eu vou focar na composição aqui beleza então a imagina o seguinte o que que eu tenho aqui nesse código pensa aqui
comigo eu tenho target ou seja o meu código depende de alguma coisa qualquer suco vamos falar assim meu código depende de uma validação de e-mail por exemplo se o meu código depende de uma validação de meio a primeira coisa que vem na cabeça da gente a gente usa alguma a gente criar uma expressão regular por exemplo a gente utilizar alguma coisa o que é bem mais simples né no caso eu pego ali o vale dei por exemplo vale de heitor tem uma função lá dentro que chama isa e-mail é só eu passar o meu valor
para dentro dessa funciona já me retorna ser válido não é bem mais simples a gente utilizar framework seu caso para fazer a validação do que a gente criar nossa própria validação no caso a nossa intenção seria que o código cliente o saci diretamente o validator por exemplo só que nesse caso a gente tem um problema por causa do seguinte o meu código vai passar a depender diretamente do validator então se eu não quero fazer essa dependência isso pode gerar vários problemas para por exemplo se algum dia eu quiser mudar o vale de heitor eu vou
ter problemas no meu código todo todos os locais que eu utilizei validator vou ter que receber testar eu vou ter que fazer várias várias coisas novamente certo vou quebrar vários princípios da programação que no caso então quê que eu teria a o meu código aqui no caso dependendo de alguma coisa só que ao invés de eu falar diretamente que eu dependo do vale de heitor eu dependo do nordeste eu dependo do express por exemplo qualquer coisa externa eu vou falar que o meu código precisa dessa coisa através de uma interface então por exemplo aqui eu
poderia chamar-se interface de e-mail validator por exemplo interface alguma coisa assim só para falar olha meu código depende de uma interface que saiba como validar e-mail e daí nesse caso específico eu não preciso saber nem eu nem meu código precisamos saber nesse momento quem vale dor meio como que avaliação de mil é feita a única coisa que eu sei que meu código precisa validar um e-mail suponho que esteja validar no formulário ou qualquer coisa do tipo beleza eu sabendo disso eu já crie uma interface com a linguagem que eu quiser a linguagem onipresente do software
da maneira que eu preciso ali no caso beleza criada ali feito agora eu preciso implementar um toque aqui na implementação dessa interface eu preciso de duas coisas eu preciso agora na implementação mesmo real concreta eu preciso saber quem vai validar o e-mail porque agora eu sabendo quem vai validar o e-mail eu eu posso criar métodos aqui dentro e daí chamar a classe o framework ou livro o código que vai validar o e-mail então por exemplo eu tenho a interface eu tenho implementação dessa interface aqui só que dentro do método da interface que eu falei que
ia por exemplo suponha que esse método chamasse easy e-mail vai validar o e-mail exame aqui no caso de dentro desse método no meu validador concreto concreto eu vou chamar o método da interface que vai validar o e-mail mesmo no caso aqui não é isso aqui seria a classe que vai ser adaptada e isso aqui seria a classe que está adaptando o a-darter no caso aqui beleza e daí é o que eu faço aqui é simplesmente re o chamados aqui daqui para cá no caso do adapter para a classe que está sendo adaptada e aí você
pode observar esse aqui pensar nossa mas eu tô trocando eu tô simplesmente adicionando alguma coisa no meio do caminho aqui só para complicar um negócio mas não porque o que que acontece agora o meu código dependendo somente do meu adaptei aqui o adaptador se algum dia eu precisar trocar a interface que está sendo adaptado aqui o código que precisa ser adaptado por exemplo se for uma live externa ela parou de ser atualizada parou de ser mantida por exemplo eu preciso trocar essa interface a única coisa que eu preciso mudar no código é o adapter eu
não preciso voltar a testando código nada não preciso refazer nada aqui no meu código anterior simplesmente troco no adapter para que ele use uma outra biblioteca ou seja eu joguei o framework o código legado isso aqui que não sei o que importa é claro que isso é importante mas não seria importante dentro da minha aplicação dentro do meu domínio aqui eu joguei isso aqui para fora do meu domínio no caso beleza então eu dependo de coisas de dentro do meu domínio e daí somente o meu adapte depende de coisas fora do meu domingo beleza então
assim que eu adaptei funciona tá eu te falei que eu ia te falar que eu vou te falar aqui do herança múltipla como que funcionaria se fosse as casas nesse caso é a mesma coisa eu tenho uma interface no caso aqui e eu tenho a interface que é incompatível com o meu programa aqui no caso no nesse caso em específico daí nessa múltipla o que eu faço é herdar estender as duas classes aqui no caso eu posso fazer isso com interfaces também mas aqui vão falar de herança múltipla porque assim que eles mencionam o livro
eu posso estender aqui no caso essas duas interfaces e daí o meu cliente só conhece o método dessa interface aqui então toda vez que o meu cliente for chamar o adaptar a chamar o método dessa interface e aí de dentro do adaptar eu tenho acesso aos dois eu tenho acesso ao rei cash e a diferença entre quest de dentro do adapter quando o meu cliente jamais se our quest que é o método que tem nessa interface de dentro dele eu chamo abre for any request beleza assim eu faço adaptação das duas interfaces então assim que
funciona o adaptador aqui vamos dar uma olhada na aplicabilidade dele que a utilize o padrão adapter quando você não quiser que seu código dependa diretamente de códigos de terceiros ou legado a gente falou sobre isso a ao longo da aula inteira aqui né então não vou repetir isso para você a quando você quiser usar uma classe existentes mas sua interface for incompatível com a interface do código que nossa desculpa por gente quando você quiser usar uma uma classe existente mas sua interface for incompatível com a interface aqui seu código ou domínio precisão aí aquele negócio
se você precisar da tão um código para mudar nomes ou talvez também se você quiser adicionar alguma funcionalidade também na classe que você tá dando você pode utilizar o adaptou para ir se daí vem esse terceiro aqui que é isso que eu te falei se você quiser reutilizar sobre classes que não possuo um determinada funcionalidade mas for impraticável estender o código de cada uma apenas para adicionar a funcionalidade desejar isso daqui que está descrito que tem um outro padrão de projeto que faz exatamente a mesma coisa que é o de cor heitor tá a gente
vai falar sobre ele nas próximas aulas mas só para você entender você pode também utilizar o adapter na classe que você está dando você pode adicionar funcionalidade no adapter no na classe que está sendo adaptada de dentro do adapter beleza o que que é bom no adaptar aqui ele desacopla a o código da aplicação de código de terceiros como a gente o zé por exemplo não depender diretamente de um código de terceiro como o validador de e-mail como express como um mongo db qual que é coisa de terceiros eu posso criar datas para isso ele
aplica o single responsibility principle porque eles e para a conversão da interface da lógica da aplicação e ela aplica o open cloud principal porque se a gente trabalhar com interfaces o caso que fica fácil criar novos adaptar é só o estender essa interface e criar um novo adapter para adaptar uma outra coisa ou até mesmo adaptar mesma coisa tanto faz ele aplica aqui então o open cloud principal e o que que é ruim não adapter eu particularmente não vejo nada de um um abraço aqui mas ele aumenta a complexidade né você você poderia utilizar se
você quisesse você podia poderia utilizar o código ou a biblioteca de terceiros diretamente um toque saiba que quando você usa alguma coisa diretamente no seu código seu código está acoplado a biblioteca de ter certeza acabou de casar com foi no work vamos falar assim então a ele aumenta a complexidade mas ele desacopla o seu código então por isso que eu não considero isso como algo ruim aumenta um pouquinho só complexidade só mais uma interface ali uma classe concreta no meio do caminho é porém por outro lado qual que seria a outra solução né eu até
deixei escrito aqui pelo o que o que mais que eu poderia fazer você provavelmente vai terminar usando uma a pena o seu código vai por mim beleza na próxima aula a gente vai falar sobre a implementação prática né eduarda então a gente vai pôr a mão no código beleza então vou deixar essa aula aqui assim e a gente se vê na próxima grande abraço