Article image
Carlos silva
Carlos silva25/04/2024 18:40
Compartilhe

ArchFlow, automatizando arquiteturas

  • #Automação
  • #Arquitetura de Sistemas
  • #Python

Um ponto negativo, que muitas vezes impede que os desenvolvedores adotem uma arquitetura mais sofisticada, é a necessidade de cumprir prazos, priorizando a entrega rápida em detrimento da qualidade. Em poucas palavras, os programadores muitas vezes se veem na situação de priorizar a agilidade, sem necessariamente considerar aspectos como manutenção futura, escalabilidade ou a possibilidade de troca de tecnologias. Em resumo, o que geralmente pesa mais na balança é ter a funcionalidade pronta e disponível para o cliente.

Quem nunca se viu diante de um código e pensou:

Bem que eu gostaria de implementar tal arquitetura, isso possibilitaria uma melhoria considerável no futuro, mas o meu gerente já está na cola para entregar essa demanda, ainda preciso ver outro bug… fica para uma próxima

A escolha em adotar uma arquitetura robusta, que implementa e respeita principios do SOLID, Clean Architecture ou seja qual for a maneira que você julga ser mais eficaz, pode trazer vantagens, assim como desvantagens, um downside comum sendo o aumento no tempo de produção.

Como podemos fazer para implementar uma arquitetura complexa, sem que isso aumente de maneira tão evidente o tempo de implementação? Uma alternativa é utilizar ferramentas prontas para facilitar a criação do código repetitivo, o famoso boilerplate code. As principais IDEs da atualidade já fornecem por padrão essa conveniência, como os tão famosos geradores de Getter e Setter em Java, que hoje em dia desconheço quem faz manualmente. Além disso, existem outras extensões e plugins, como o Lombok, Hibernate e o CAE, que também ajudam no desenvolvimento de códigos.

Mas onde entra o Arch Flow?

Considere a sua arquitetura favorita, os componentes padrões, como estruturas de diretório e arquivos, seguindo as suas práticas favoritas de desenvolvimento. Agora, imagine uma ferramenta na qual você simplesmente digita um comando no terminal para invocar uma função e ele automaticamente gera arquivos, pastas e até projetos inteiros para você. No entanto, desenvolver tal ferramenta poderia ser complexo; seria necessário criar toda a lógica por trás, fazer com que o sistema interprete os modelos, manipulá-los para substituir partes específicas conforme necessário — afinal, nem tudo teria o mesmo nome ou estrutura exata, não é mesmo? Como uma pessoa ocupada e com diversas responsabilidades encontraria tempo para isso? A resposta é que provavelmente não encontraria. No entanto, imagine ter à disposição uma implementação pronta para uso, compatível com diferentes sistemas operacionais, na qual você só precisaria fazer ajustes nos modelos (caso necessário) e pronto: teria seu próprio gerador de código. E o melhor: poderia compartilhá-lo com o seu time. Esse é o Arch Flow.

image

Peças de Lego representam bem a essência do ArchFlow, onde cada peça representa uma função e essas funções podem se conectar entre si, mesmo que, em termos de existência e implementação, elas sejam independentes. O resultado final depende, em grande parte, da criatividade do usuário.

Para simplificar, escolhi uma implementação do ArchFlow, seguindo os princípios da Clean Architecture. Especificamente, estou utilizando o CAE-CLI, que é uma implementação prática e em constante evolução do ArchFlow. Para mais detalhes sobre como utilizar o CAE e entender seus objetivos, sugiro a leitura deste artigo sobre arquitetura limpa.

Antes de tudo, é necessário criar o projeto, certo? Errado! Podemos simplesmente abrir o terminal e executar um comando chamado ‘new_project’. Inclusive, nosso projeto possui 4 camadas que se comunicam, o que torna um pouco trabalhoso criar manualmente.

image

A sintaxe do comando é simples: basta invocar o CAE, especificar a função desejada e fornecer os argumentos necessários. O resultado esperado é a criação de três camadas, cada uma contendo seu próprio projeto Java, e todas interagindo entre si

image

Esse comando gera essas camadas:

image

Também é possível criar arquivos específicos seguindo um modelo. A função new_func (nova função de caso de uso) estabelece uma base completa para casos de uso que requerem entradas e saídas.

image

esse comando gera essa estrutura de pasta dentro das camadas

image

Além disso, cada arquivo .class é personalizado conforme necessário, seguindo um modelo. Por exemplo, no caso do CadastrarNovoFuncionarioUseCase na camada core, seu conteúdo é o seguinte:

image

Esta é apenas uma breve demonstração das possibilidades oferecidas pelo ArchFlow para aprimorar a experiência diária. Sua eficácia é altamente influenciada pela maturidade da arquitetura adotada e pela abrangência de seus modelos pré-definidos.

O ArchFlow é um projeto de código aberto, concebido para servir como base para sistemas de automação. Uma implementação notável é o CAE-CLI, que foi utilizado para ilustrar parte de suas capacidades. Se estiver interessado, você pode explorar o projeto no GitHub e contribuir para seu desenvolvimento.

Qualquer dúvida ou dica podem falar e vou buscar responder todos.

Compartilhe
Comentários (0)