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

Dependencia invertida? #2

Open
MoacirSchmidt opened this issue Aug 5, 2020 · 1 comment
Open

Dependencia invertida? #2

MoacirSchmidt opened this issue Aug 5, 2020 · 1 comment

Comments

@MoacirSchmidt
Copy link

MoacirSchmidt commented Aug 5, 2020

  1. A imagem Clean-Architecture-Cone.jpg sugere que DB depende de Gateway.

  2. No entanto, TDepositoGateway em Gateway.Deposito recebe IDBConnection no Create o que o torna dependente desta interface

Tem algo que me escapou ai?

P.S. Parabéns pelo excelente contéudo!

@AndreLuisCelestino
Copy link
Owner

Olá, Moacir!
Primeiramente, peço mil desculpas pela demora. Fiquei envolvido com alguns projetos no último mês que exigiram um pouco do meu tempo.
Em segundo lugar, parabéns por essa observação! Não escapou nada. Você está certo.

Quando eu estudei sobre Clean Architecture, também fiquei um pouco perplexo com o fato de DB depender da camada de Gateway. Porém, ao avaliarmos melhor, a camada de entidades (entities), que fica bem no topo do cone, precisa de uma conexão com o banco de dados para recuperar ou persistir dados. Como a camada de BD não se comunica com a camada de entidades, a solução que elaborei compreende em "injetar" uma instância da conexão com o BD que "sobe" no cone, ou que "entra" nas camadas, no caso da imagem em círculo.

No entanto, fiquei um bom tempo pensando na resposta da sua issue e cheguei à conclusão de que o nome da Interface que eu utilizei possivelmente não ficou apropriada. Ao invés de IDBConnection, talvez o ideal seria IRepository, principalmente por 2 motivos:

  1. Remover essa interpretação de que o Gateway depende de BD;
  2. Esclarecer que o Gateway não trabalha exclusivamente com banco de dados. O repositório pode ser uma API, WebService, arquivos ou inclusive Mocks, no caso de testes unitários.

Mesmo assim, Moacir, gostaria de destacar que (ainda) não li o livro inteiro. Talvez uma explicação mais assertiva dessas dependências esteja em uma parte específica do livro. Quando eu finalizar minha leitura, se necessário, faço ajustes no projeto e atualizo a minha resposta nessa issue.

Obrigado pelo feedback! Abraço!

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

2 participants