Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dúvidas relacionadas a LIVE: REST, GraphQL, Clean Architecture e TypeScript com Rodrigo Manguinho // Live #69 #1

Open
elyosemite opened this issue Apr 29, 2023 · 0 comments

Comments

@elyosemite
Copy link

Introdução

Assisti a live inteira sobre Clean Architecture e anotei algumas dúvidas. Baixei o código-fonte do GitHub e adicionei algumas coisas para testar meus conhecimentos, mas surgiram algumas dúvidas que achei interessante compartilhar.

Portanto, decidi abrir essa issue para sanar algumas dúvidas ou confusões da minha parte, talvez isso sirva para alguma outra pessoa também.

Dúvidas

  1. Com a criação dos Adapters para o Express e para o Apollo, recebendo um Controller, eu consigo isolar o Express e o Apollo. Dessa forma, eu segrego a criação e o uso desses Adapters. Em resumo, como estou implementando uma interface Adapter, eu consigo fazer com que qualquer biblioteca alternativa ao Apollo se comunique com qualquer framework alternativo ao Express. Entendi bem?

  2. Falando sobre o Repository, seria mais expressivo se eu criasse um Repository para Ranking chamado RankingRepository com os métodos mais básicos (GetLast, GetTopFive, GetFirst, InsertOne, InsertMany, ...) ao invés de criar uma classe para cada método? Se eu fosse adicionar mais um Use Case chamado TopFiveRankingLoader, onde poderia melhorar no seguinte caminho:

  3. Onde estou errando nesse pensamento?

  • UseCase: TopFiveRankingUseCase (mudei o nome para ficar mais expressivo, mas é a mesma coisa que TopFiveRankingLoader)
  • Infra/Repositories: RankingRepository.GetTopFiveRanking() - Eu particularmente mudaria o Repository
  • Data/Services: TopFiveRankingLoaderService
  • Presentation/Controllers: LoadTopFiveRankingController

    Aqui fiquei confuso. Me parece que para cada método dentro do meu Repository (GetLast, GetTopFive, GetFirst, InsertOne, InsertMany, ...) eu TENHO que criar uma classe de serviço dentro de Data/Services (GetLastRankingService, GetTopFiveRankingService, GetFirstRankingService, InsertOneRankingService, InsertManyRankingService) que por sua vez só será usada dentro de um arquivo de Controller - este também com o mesmo padrão de 1 para 1.

    Para esclarecer minha dúvida/confusão, na minha cabeça está assim (um uso aninhado):
  • LoadTopFiveRankingController
    • TopFiveRankingLoaderService
      • RankingRepository.GetTopFiveRanking()
        • TopFiveRankingUseCase
  • LoadGetFirstRankingController
    • GetFirstRankingLoaderService
      • RankingRepository.GetFirstRanking()
        • GetFirstRankingUseCase
  • LoadInsertOneRankingController
    • InsertOneRankingLoaderService
      • RankingRepository.InsertOneRanking()
        • InsertOneRankingUseCase

Para mim, isso está "orientado ao método do repository", porque toda vez que eu tiver um método (como por exemplo o InsertOne na lista acima) , eu preciso criar acima dele um service e acima deste service também devo criar um controller e, por fim, um abaixo do repository que seria meu UseCase. Consegue perceber onde estou errado? Minha linha de raciocínio sempre está um para um. Sei que estou errando em alguma coisa.

Outra coisa que ficou confusa para mim:

  1. O Service usado é o Service do DDD? Caso seja, não deveríamos usar o Service apenas quando uma operação ultrapassa os limites transacionais impostos por um Agregado, isto é, quando há mais de um Agregado envolvido?

  2. Pensando em uma abordagem de DDD, eu poderia remover essa classe de Service e, portanto, injetar o Repository via construtor direto no Controller?

  3. Falando sobre o controller, para cada possível rota que eu venha ter, eu devo deveria criar um arquivo separado que implementa o Controller (com método handle) para executar minha intenção (de obter dados ou mudar o estado)?

InsertOneRankingController
DeleteOneRankingController
UpdateOneRankingController
GetTopFiveRankingController

Seria mais ou menos nesse estilo?

Essas foram as minhas dúvidas e talvez seja a de alguém também. A LIVE foi incrível, aprendi bastante e se teve dúvida é porque foi boa mesmo e é um sinal de quê estou aprendendo. Abraços!!!! Só tenho mais que agradecer ao @rmanguinho e ao Rodrigo Branas.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant