You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
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?
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:
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
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:
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?
Pensando em uma abordagem de DDD, eu poderia remover essa classe de Service e, portanto, injetar o Repository via construtor direto no Controller?
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)?
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.
The text was updated successfully, but these errors were encountered:
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.
Dúvidas
Com a criação dos Adapters para o
Express
e para oApollo
, recebendo umController
, eu consigo isolar oExpress
e oApollo
. 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 aoApollo
se comunique com qualquer framework alternativo aoExpress
. Entendi bem?Falando sobre o
Repository
, seria mais expressivo se eu criasse umRepository
para Ranking chamadoRankingRepository
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 umUse Case
chamadoTopFiveRankingLoader
, onde poderia melhorar no seguinte caminho:Onde estou errando nesse pensamento?
TopFiveRankingUseCase
(mudei o nome para ficar mais expressivo, mas é a mesma coisa que TopFiveRankingLoader)RankingRepository.GetTopFiveRanking()
- Eu particularmente mudaria o RepositoryTopFiveRankingLoaderService
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
Outra coisa que ficou confusa para mim:
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?
Pensando em uma abordagem de DDD, eu poderia remover essa classe de Service e, portanto, injetar o Repository via construtor direto no Controller?
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.
The text was updated successfully, but these errors were encountered: