Tenha uma base de código compartilhada entre vários microsserviços.
Tags: git, programming, webdev, portugues
Published: 2023-07-24 14:34:43

# Introdução

Recentemente, deparei-me com a necessidade de compartilhar uma base de código entre vários microsserviços. Encontrei uma solução eficiente e simples: o Git Submodule. Com esse comando, pude centralizar módulos, como autenticação e serviços específicos, garantindo um versionamento impecável. Compartilhar essa descoberta é uma forma de simplificar a vida dos desenvolvedores que enfrentam desafios semelhantes. Vamos embarcar juntos nessa aventura épica de compartilhamento de código!

Neste tutorial, vamos explorar os benefícios de utilizar módulos compartilhados em uma arquitetura de microsserviços. Apresentaremos dois casos de uso que podem convencê-lo a adotar essa abordagem em seus projetos.

# Alguns casos de uso



### Primeiro caso: Simplificando a autorização em microsserviços

Imagine que estamos desenvolvendo uma aplicação altamente complexa, composta por diversos módulos e microsserviços. Todos esses microsserviços têm um requisito em comum: eles precisam verificar as permissões do usuário para acessar determinadas áreas dos recursos disponíveis por meio de solicitações HTTP.

Você decidiu não usar nenhuma solução serverless, replicar toda a lógica de autorização em cada projeto seria uma tarefa árdua. Qualquer alteração ou atualização exigiria modificações em todos os microsserviços individualmente, o que seria trabalhoso e propenso a erros.

No entanto, ao utilizar módulos compartilhados, podemos centralizar a lógica de autorização em um único local. Podemos criar um módulo dedicado que lida com todas as verificações de permissão e disponibilizá-lo para uso em todos os microsserviços relevantes.

Dessa forma, sempre que precisarmos atualizar ou modificar a lógica de autorização, faremos isso em um único lugar. Essas alterações se refletirão automaticamente em todos os microsserviços que utilizam o módulo compartilhado, garantindo a consistência e a eficiência do desenvolvimento.

### Segundo caso: Compartilhando entidades entre aplicações backend e frontend

Imagine que temos uma aplicação simples que requer várias entidades em sua camada de regra de negócio. Porém, também precisamos trabalhar com as mesmas entidades no frontend.

Ao utilizar um módulo compartilhado, podemos facilmente compartilhar informações entre as duas aplicações. Podemos definir as entidades em um único local e compartilhá-las entre o backend e o frontend.

Isso traz benefícios significativos, como a manutenção simplificada e a consistência entre as aplicações. Qualquer alteração ou adição de entidade será refletida automaticamente em ambos os lados, eliminando a necessidade de sincronização manual de código.

Embora esses exemplos apresentem casos simples de uso, é importante ressaltar que as possibilidades de abstração e reutilização de código são vastas. Podemos criar módulos compartilhados para encapsular lógicas complexas e reutilizáveis, facilitando o desenvolvimento e a manutenção de projetos de qualquer escala.

Vamos explorar a implementação desses módulos compartilhados em detalhes ao longo deste tutorial.

# Tutorial de Uso de Git Submodules

Neste tutorial, aprenderemos a usar o recurso do Git chamado "submodules" para compartilhar e centralizar a lógica de autorização de usuário em um módulo compartilhado. Isso nos permitirá alterar e atualizar a lógica em um único local (o repositório "shared") e refletir essas mudanças em vários microserviços sem repetir código.

### Passo 1: Iniciando a Estrutura do Projeto

Se você está criando uma nova estrutura de projeto, comece definindo a estrutura de pastas que você usará no projeto. Em seguida, inicie um novo repositório Git para o projeto base. Isso pode ser feito usando o comando `git init` na raiz do projeto.
Irei usar a estrutura de pastas abaixo:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8331i6itqt4yi41gijw0.png)



### Passo 2: Criando o Repositório "shared"

Agora, crie um novo repositório Git separado, que chamaremos de "shared". Este repositório será usado para centralizar a lógica de autorização de usuário e outras funcionalidades compartilhadas entre os microserviços.

### Passo 3: Adicionando o Repositório "shared" como Submódulo

Agora que temos nosso projeto base e o repositório "shared" criados e inicializados, podemos adicionar o "shared" como um submódulo ao projeto base.

1. Navegue para a raiz do projeto base.

2. Use o comando `git submodule add <URL_DO_REPOSITORIO_SHARED> <CAMINHO_DESEJADO_PARA_SUBMODULO>` para adicionar o "shared" como submódulo. O `<URL_DO_REPOSITORIO_SHARED>` é a URL do repositório "shared" que você clonou anteriormente, e `<CAMINHO_DESEJADO_PARA_SUBMODULO>` é o caminho onde o submódulo será colocado dentro do projeto base.
3. Entre no diretório do shared e crie o primeiro arquivo dentro da sua pasta shared e adicione para a staging area com `git add .`
4. Faça o commit das mudanças para registrar o submódulo no projeto base: 

`git commit -m "Adicionar submódulo 'shared'"`


Considerando que estou utilizando minha estrutura de pastas, a sequência de comandos ficaria assim:
```bash
git submodule add <URL_DO_REPOSITORIO_SHARED> ./src/modules/shared
cd ./src/modules/shared
echo export class Person {} >> person.entity.ts 
git add .
git commit -m "Adicionar submódulo 'shared'"
git push
```
Aqui você movimentou o repositório shared, colocando seus arquivos compartilhados.

### Passo 4: Trabalhando com o Submódulo

Agora que o submódulo foi adicionado ao projeto base, sempre que você fizer alterações no repositório "shared", essas alterações serão refletidas no submódulo dentro do projeto base.

1. Para fazer alterações no submódulo, primeiro entre no diretório do submódulo usando `cd <CAMINHO_DESEJADO_PARA_SUBMODULO>`.

2. Faça as alterações necessárias no código do submódulo.

3. Após fazer as alterações, volte para o diretório do projeto base usando `cd ..`.

4. Faça o commit das alterações no submódulo:

```bash
git add <CAMINHO_DESEJADO_PARA_SUBMODULO>
git commit -m "Atualizar submódulo 'shared'"
git push
```

## Para clonar um repositório com submodulos

Se você clonar o projeto base em outro ambiente, os submódulos não serão clonados automaticamente. Para obter os submódulos, você precisará executar o seguinte comando após clonar o projeto base:

```bash
git submodule update --init
```

_**Observação: leve em consideração que, se forem projetos privados, você terá de ter acesso ao repositório base e ao shared para conseguir clonar o submódulo.**_

Esse foi o meu primeiro post! Se você tiver qualquer consideração, dica ou achar que algo está faltando, por favor, deixe um comentário. Estou aberto a sugestões para melhorar!