Esse papo começou comigo e com a Vivian (Gerente de Produto do Colab) entendendo melhor como poderíamos trazer mais opções de arquitetura da informação e experiência que temos em todo nosso ecossistema, com isso descobrimos que não poderíamos repensar a estrutura focada somente nas aplicações, tínhamos que abstrair o conceito de flexibilização como se fosse um serviço, desacoplado de tudo.
Pensando nisso, começamos a vislumbrar um caminho onde nós deveríamos moldar a experiência não com regras fixas, mas sim com regras que seriam flexíveis por si só, nisso nasceu o conceito do service-provider.
Ok, ok mas me explica ai o que é essa parada…
O service-provider é um conjunto de arquiteturas que vai servir para moldar a experiência do usuário baseado em determinados inputs:
Basicamente, recebemos a entidade inteira do usuário e junto com nossas outras regras flexíveis, conseguimos prover insumos necessários para que ele tenha uma experiência customizada, dependendo de onde ele esteja, quem ele seja ou em que momento ele está interfaceando conosco.
Do que é feito o service-provider?
Agora que estamos na mesma página do que o service-provider vai fazer, vamos mais fundo para entender como ele pode ser concebido.
Existe um conceito muito conhecido no mundo de desenvolvimento que são os micro serviços, que nada mais são do que funções desacopladas do nosso core para podermos ter um gerenciamento melhor. O service-provider nasceu sendo pensado em um micro serviço porém, na primeira semana, já vimos que esse modelo não iria funcionar.
Não me entenda mal, micro serviços são ótimos, mas precisávamos de algo que fosse componentizado e totalmente desacoplado da arquitetura que temos hoje, agnóstico à regra de negócio que temos hoje, que funcionasse para qualquer base code que temos ou venhamos a ter.
A pergunta óbvia é: podemos fazer isso quando trabalhamos com serviços? Evidentemente, a resposta é sim! Os serviços não têm que ser feitos de pequenos monólitos. Em vez disso, podemos ser projetados com base nos princípios SOLID, recebendo uma estrutura de componentes que suporte inclusão de novos componentes sem que se alterem componentes já existentes dentro do serviço.