1
resposta

[Dúvida] Chain Of Responsability ou Controllers

Olá, estou iniciando em um projeto de uma API, totalmente educativo, de realizar transações financeiras, pagamentos ... Estou em dúvida sobre a arquitetura do sistema, e qual é a melhor a se usar neste caso.

Minha aplicação receberá uma requisição e dela eu terei que: Filtrar/Validar a requisição => Autenticar => Autorizar => Realizar a operação financeira dependendo da autorização.

Neste caso, seria melhor usar o padrão MVC com Middlewares para validar, autenticar, autorizar e Controllers para realizar a autenticação? Ou eu trato todos estes processos como Handlers e vou passando um a um até concluir a operação?

Agradeço desde já a opinião de todos!

1 resposta

Olá, Carlos

Sua dúvida é bastante relevante e comum quando estamos projetando a arquitetura de uma aplicação. Vamos tentar esclarecer um pouco.

Ambas as abordagens que você mencionou têm seus méritos e podem ser aplicadas ao seu cenário. No entanto, a escolha entre elas pode depender de alguns fatores, como a complexidade da sua aplicação e suas preferências pessoais.

No caso do padrão MVC com Middlewares, você teria uma separação clara de responsabilidades, onde cada Middleware é responsável por uma tarefa específica (validação, autenticação, autorização) e os Controllers são responsáveis pela lógica de negócios (realizar a operação financeira). Isso pode tornar o seu código mais organizado e mais fácil de manter.

Por exemplo, você poderia ter um Middleware para validar a requisição, outro para autenticar o usuário e um terceiro para verificar se o usuário tem permissão para realizar a operação solicitada. Em seguida, o Controller receberia a requisição e realizaria a operação financeira.

Por outro lado, a abordagem de tratar todos os processos como Handlers e passá-los um a um até concluir a operação (Chain of Responsibility) pode ser mais flexível e permitir um controle mais granular sobre o fluxo de execução. No entanto, essa abordagem pode ser um pouco mais complexa de implementar e pode tornar o código mais difícil de seguir se a cadeia de Handlers for muito longa.

Por exemplo, você poderia ter um Handler para validar a requisição, que passa a requisição para o próximo Handler se a validação for bem-sucedida. O próximo Handler poderia ser responsável pela autenticação, e assim por diante, até que a operação financeira seja realizada.

Em resumo, ambas as abordagens são válidas e a escolha entre elas pode depender de fatores como a complexidade da sua aplicação e suas preferências pessoais. Você pode até mesmo combinar ambas as abordagens, se isso fizer sentido para o seu projeto.

Espero ter ajudado e bons estudos!