Arquitetura Limpa - Entendendo

Recentemente comecei a estudar arquitetura limpa, e estou com bastante dúvida sobre “use cases”, pois não entendi realmente isso. O mais próximo que cheguei da minha inteligencia foi que é um “services”, mas isso não seria parte da infraestrutura a implementação?

Segue o modelo dos meus packages:

Domain: é a parte central da aplicação, onde que deve ser colocado apenas as entidades (Enum, exceptions, etc). Outra dúvida foi que ao desenvolver relacionamento de classes, isso não é a responsabilidade do domain?

Gateways: A camada de abstrações, onde que apenas deve possuir interfaces relacionadas a entidade. A camada tem um forte vinculado com as entidades.

UseCases: Está é uma camada onde que atua como “serviço”… Não entendi muito bem.

Infrastructure: A camada das implementações, seja do gateway, persistencia a banco de dados, apenas é uma camada não abstrata e possui um grande vinculo com domain.

Adapter: A camada dos UI, ou conhecido como endpoints. Aqui deve apenas possuir Dtos, resources, enfim, tudo que envolve a interação com o usuário.

Setup: A camada de inversão da dependencia, onde tera as anotações do Spring, etc.

Acima foi o que entendi sobre arquitetura limpa. Posso estar errado ou certo? Mas aceito sugestões e dicas.

É muito similar ao “services” a diferença é como é dividida. Ao invés de ser por subsistema ou por entidade, você vai ter um para cada use case da aplicação.

Então, vc teria por exemplo, um “ComprarPizzaUseCase” e não um “PizzaService” com um método comprar()

Note que o ComprarPizzaUseCase vai usar todos os recursos necessários para esse UseCase, ou seja, ele teria vínculo com o BD de usuários, cartão, etc… ao invés disso se dividir em vários serviços separados que consomem um ao outro (embora um UseCase possa consumir outro, mas é mais para ressaltar a diferença de abordagem).

2 curtidas

Entendi! Por exemplo aplicação acima como demonstrei na foto. O PersonMapperGateway é a abstração, então poderia muito bem fazer um UseCase PersonToEntity e fazer a lógica, assim como poderia fazer outro PersonToDomain?

É um pouco complicado de entender quando se tem as abstrações (gateway) e os use cases.

Essa aplicação serve para o que, exatamente?

1 curtida

É apenas uma aplicação genérica mesmo para práticar arquitetura limpa. Mas o objeto é desenvolver uma API REST de um usuário que teŕa muitos contatos.

Entao os use cases vao se parecer com:
UserLogsIn
UserAddsContact
UserSearchesContact
ApiFillsContactInformationFromSocialNetwork

Etc…