Olá, tudo bem? Seja muito bem-vindo, muito bem-vinda a mais um módulo aqui no nosso MBA de Arquitetura. E neste módulo a gente vai começar a implantar o que a gente viu de Clean Architecture para dentro do código que a gente está no repostor arquidiesagonal. Mas a gente vai ver um pouquinho de Cleanitetura na vida real no mundo real é você não vê que aquilo que o banco bob tanto quis né separar as quatro camadas na prática fica complicado de fazer mas a gente vai fazer um o melhor aqui principalmente no java é porque não já é um pouquinho mais complicado porque a comunidade está acostumada com frameworks que vão de ponta a ponta. O Spring vai de ponta a ponta. Ele é desde gestão de dependência, até a parte de web routers, até a parte de persistência, de mensageria. O Spring faz tudo, ele cobre tudo. E aí é difícil você fugir do Spring justamente por conta disso. Nas outras linguagens como vai ser a Go, JavaScript, até o próprio Kotlin sem usar o Spring tem bastante coisa vindo que te possibilita trabalhar com pequenas bibliotecas que resolvem pequenas partes. E aí fica melhor de você entender o uso do Clean Architecture mas não tem problema eu vou mostrar algumas alternativas que a gente pode fazer aqui com o Spring. Então bora lá. Primeiro de tudo, está tudo num único módulo dentro de source, main e java. Quando eu estou aplicando o CleanArch no mundo real eu gosto de separar. Então o que eu vou fazer? Eu vou vir aqui e vou criar um módulo novo chamado Domain. Esse vai ser o primeiro módulo que a gente vai começar a trabalhar nele. Ele vai ser Build System Gradle com a DSL do Kotlin, que é o que a gente está usando ali. E aqui, BR com Full Cycle Artefato Domain. Beleza, vamos arco artefato do homem beleza vamos criar aqui ele vai ele já vai ter algumas coisinhas ser sim em full cycle papá e xingou a resposta dele tá é e aí a gente agora fazer o seguinte vão E agora vamos passar todo o código do Domain para lá. Ele buildou aqui, vamos ver. Eu vou apagar o Research, porque aqui em Domain não vai ter Research. Aqui a mesma coisa. Vamos aqui no Search, Java infrastructure domain e a gente vai passar isso aqui vou até arrastar daqui pra cá continuar e não foi vamos vamos tentar de novo, refactor, continuar, acho que apertei cancelar sem querer, beleza, vou apagar esse main, então temos agora aqui, br com full cycle domain, estou até tirando a hexagonal aqui do pacote e o application, obviamente, também no pacote, porque agora ele vai ser o nosso domen direto vou até o teste e vou fazer a mesma coisa vou trazer aqui o domen então alt insert package.br.com o cycle e vou trazer o domen pra cá refactor continue beleza então agora a gente não tem mais aqui o o domen aqui embaixo o que eu vou fazer agora é eu vou criar eu vou criar deixa eu ver se ele está reclamando aqui obviamente está reclamando então vamos só ajustar esses auto import, replace, vamos fazer replace, então o key.com.br, o cycle.exagonal.application tudo que tiver aqui dentro de application eu vou substituir pra isso aqui domain replace all aqui eu vou fazer a mesma coisa replace all, tudo que tiver aqui vai ficar desse jeito e aí eu vou trazer as exceptions que estão lá pra cá também para dentro do domen beleza deixa eu ver o que ele está quebrando aqui br condomínio foi o saico duplicou o domingo nem para aí domen domen só para um domingo beleza agora sim também o link no aqui né mas está funcionando todos os importes estão funcionando ele só está reclamando do import Porque ele como tá no mesmo pacote Ele não precisa, o que dá pra fazer é o seguinte Refactor Optimize imports Ele vai otimizar de tudo Beleza Aqui vamos ver como é que estamos Validação, beleza Então tá, então o nosso domain Ele já tá quase quase pronto né o que eu o que eu vou fazer agora eu vou continuar é vamos continuar extraindo o os pacotes e depois a gente vai configurar o a nova build source do Gradle tá então vamos, vamos criar o application Modo Application Gradle Java 17 Pa pa pa Application Beleza Vamos esperar a buildar Buildou Vamos vir até aqui Isso aqui tudo está em application Basicamente a gente vai arrastar para lá. Opa, vamos arrastar para cá. Refactor. Refactor. Vamos, filho. Reload from disk. Vamos dar um refresh aqui, porque... É Linux né gente. Linux as vezes dá uma judiada. Eita, pera aí. Vamos tentar passar tudo pra lá esses dois bom, esses dois foi beleza agora o que a gente pode fazer aqui inserir o pacote application mover esses pra lá deletar o main e aí o que eu gosto de fazer Move esses pra lá. Deletar o main. E aí o que eu gosto de fazer aqui no Clean Architecture? Lembra que o Clean Architecture pega muito pelo Screaming Architecture? Então, eu gosto de trazer isso aqui tudo. Isso aqui tudo para a raiz do Application. Eu não quero que eles fiquem dentro de um use case. Eu quero expor direto os pacotes com os nomes e expor já os casos de uso dentro dele. Porque daí quando você abre o application, você vê, beleza, customer, events, partner, e aí você vai entrando nele e você já vai vendo os casos de uso referente a eles. Eu particularmente gosto de fazer assim, a gente gosta de manter a pasta use cases, mas eu prefiro entrar pelo Screening Architecture. E aqui o repositories, o que eu normalmente faço? Os repositories normalmente eu deixo essas interfaces aqui dentro do domain. os repositórios normalmente eu deixo essas interfaces aqui dentro do domain então o customer, customer repository event repository repository partner repository e ticket vai ficar aqui dentro de event ticket ticket repository beleza eu particularmente gosto de fazer dessa forma é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é é files domain replace all vamos ver se ficou certinho agora vamos fazer aquele mesmo esqueminha optimize import beleza e aí no application não é só colocar interfaces caso você precise de alguma outra, sei lá, de repente algum gateway aqui, né, daí acho que você poderia colocar. Tirando isso, eu gosto de deixar encapsulado aqui embaixo. Mas não se preocupe com isso, né, o nome de pasta, esse tipo de organização, às vezes não. É meio pessoal. O Branas, por exemplo, gosta de manter os use cases aqui em cima e os repositories também. É meio particular aqui eu vou tirar eu vou tirar esse exáguas não não funcionou mas não tem problema que eu fazer agora então a gente já criou apl módulo que é o infrastructure show de bola, infrastructure, vamos deixar buildar e a gente vai passar o código pra lá, ah e esquecemos de passar os testes do application também né então vamos esperar enquanto o infrastructure builda, vamos tirar esse git ignore, não precisa e a gente vai passar os testes aqui dos use cases pra lá. Então, out insert package br.com fullcycle do refactor continue, beleza, então trouxemos pra cá a faltou o package da application a gente vai mover todos eles pra dentro da application resources não tem e aqui temos esses ITs vão voltar para cá, porque é integration. Vamos trazer para cá. Beleza. A gente vai ter que possen e aqui a mesma coisa Domain.exceptions Replace all Usar Beleza, não tem problema Ele está reclamando porque a gente ainda Não Trouxe aquele Cara, então para trazer Um outro submódulo Para dentro, a gente só precisa disso aqui A gente já vai vir arrumar também o build.gradle, mas só por hora, pra ele parar de reclamar. Beleza. Ah tá, using memories, repositories a gente tem que trazer pra cá. Repository... Aqui também, customer repositories... Bom, vamos deixar os repositories aí por fora mesmo, não tem problema. E aí tudo que estava com isso aqui, refact, replace all, se tiver isso aqui, só tira o hexagonal da frente replace beleza vamos ver se tem alguma coisa quebrando o que está quebrando? ah tá, é porque mudou os repositórios para dentro do domain então a gente precisa mudar esses carinhas aqui também replace all, tudo que tiver com repository vai virar, na verdade esse cara vai mudar, possivelmente vou ter que fazer um a um aqui, mas vamos fazer o seguinte vamos arrumar estes primeiro, replacing file, então tudo que estava com hexagonal application domain vai virar só domain, replace all, e aí o exception a mesma coisa, então replacing files, tudo que estava com exception vira domain exception, replace all, e aí o repositório vai importar do lugar correto aqui já tá tá preciso arrumar esses aqui agora e agora vou ter que arrumar tudo isso aqui também, peraí copiar, replacing files, domain, application, domain replace all, beleza Replace all. Beleza. Beleza. Ajustar aqui esse cara. Esse já está ajustado. Ajustar este repositório. Ajustar este repositório. Beleza. Aqui que esse aqui está reclamando. aqui que esse aqui tá reclamando só falta apagar, tá bom aqui tá reclamando de alguma coisa? ah tá, porque aqui os casos de uso ainda precisam ser ajustados, né? Então vamos lá. Ajustar os importes. Tiros quebrados. Ajusta os importes. Tiros quebrados. Ajusta os importes. Tiros quebrados. Esse aqui já foi, agora falta esse aqui. Tiros quebrados Ajusta, tiros quebradinhos Beleza A gente vai dar esse teste aqui, vamos ver se ele vai passar Beleza, então os testes da camada de application passaram Os testes da camada de domain também vão passar Vou escolher esses resources aqui deixa eu ver se faltou algum resource aqui, não, ah, faltou aqui beleza, então já passamos os casos de uso e as entidades de domínio para os seus respectivos submódulos agora eu vou pausar o vídeo, no próximo a gente vai fazer a parte de infrastructure e da parte se der tempo também, de Build Source. Então é isso, estamos começando a organizar aqui os sub-modos, vocês vão ver a vantagem disso depois. E vejo vocês no próximo vídeo. Até logo!