Aplicações WEB Modernas (ou talvez nem tanto) === Aplicações WEB modernas seguem um fluxo básico de implementação que já vi profissionais que o mercado considera como sênior (~10 anos de carreira) não terem uma visão completa do mesmo deixando a tomada de decisão e a implementação do software menos eficiente Para demonstrar esse fluxo irei diluir em um exemplo utilizando a menor unidade de abstração que temos para esse fim: uma função! No exemplo a seguir temos todo o fluxo básico de funcionamento de uma aplicação WEB modernafunction server(request) { middlewares(request); validations(request); const data = service(); // camada de dados imbutida aqui return { "data": data }; }Embora o exemplo seja simples e bem minimalista, ele reflete a estrutura fundamental das aplicações WEB modernas. Vamos detalhar então o fluxo: Provavelmente você já ouviu falar sobre: Controllers, Services, Repositories e um monte de outros termos bonitinhos, seguindo essa abordagem já conhecida temos o seguinte:middlewares => validações => controllers => serviços => persistência (camada de dados) => (efeito slingshot) => persistência (camada de dados) => serviços => controllers => middlewaresVamos então para uma breve explicação sobre cada etapa: - Middleware Atua como porteiros que podem ou não definir regras de entrada ou saída ao recurso em questão - Validações Regras para assegurar que os dados atendem aos critérios necessários antes de prosseguir. Por exemplo, se a pessoa que solicita o acesso não tem a CNH (Carteira Nacional de Habilitação) com a categoria igual à 'B' então não deve conseguir realizar o acesso Anota isso: Não deixamos essa pessoa passar para depois ir atrás dela - Controllers São como pontos de entrada (uma porta em uma casa). Temos nas aplicações modernas diferentes abordagens podendo elas ser: REST, GraphQL, RPC - Serviços É a camada que realiza a manipulação e controle das regras de negócios dos dados informados - Persistência (camada de dados) É a camada que faz o acesso aos locais onde tais informações estão armazenadas: MySQL, MongoDB, Arquivo - Efeito Slingshot O famoso 'tudo que vai volta', quem solicita um determinado recurso espera uma resposta. Após a persistência/consulta a aplicação refaz todo o fluxo para apresentar uma resposta ao cliente (solicitante), podendo os dados no retrocesso serem processados antes da apresentação Aplicabilidade --- Já tive experiência com aplicações que não seguiam essa abordagem, sendo o mais comum a omissão da etapa de validação - ou pelo menos não dando uma atenção devida a essa etapa - isso faz com que o núcleo da aplicação fique com dados inconsistentes. Mas qual o efeito disso? Quando se tem uma aplicação com dados inconsistentes de alguma maneira haverá a validação desses dados em outro processamento (caso não se deseje encontrar um erro), fazendo com que a complexidade de outros serviços que realizam a manipulação do mesmo dado aumente, muitas vezes sem necessidade, simplesmente pelo fato de não ter tido uma validação no início do processamento, ou ainda pior, uma mesma validação de integridade seja realizada diversas vezes por diferentes serviços havendo uma duplicação da mesma