GithubHelp home page GithubHelp logo

rmanguinho / clean-ranking-loader Goto Github PK

View Code? Open in Web Editor NEW
237.0 237.0 49.0 63 KB

Exemplo de API feita com Rest e GraphQL utilizando Clean Architecture

Home Page: https://rmanguinho.github.io/

License: GNU General Public License v3.0

TypeScript 100.00%

clean-ranking-loader's People

Contributors

rmanguinho avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

clean-ranking-loader's Issues

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

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.