(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5LHNRP9'); thecodest, Autor em The Codest - Página 9 de 13

Introdução

Para falar sobre PackwerkPara isso, é necessário introduzir alguns conceitos.

Problemas

Como sabemos, Rubi não fornece uma boa solução para impor limites de código. Podemos especificar a visibilidade, mas todas as dependências serão carregadas no espaço de nomes global. Em aplicações grandes ou monolíticas, essa falta de limites produz os seguintes problemas.

Numa tentativa de modularizar o monólito da Shopify e impor limites, tentaram diferentes soluções sem obter os resultados esperados:
- Definição de constantes privadas,
- Estabelecer limites através de gemas,
- Utilizar testes para evitar associações entre componentes,
- Utilizando a gema Modulation do Ruby,
- Criação de microsserviços.

Com todos os conhecimentos adquiridos em tentativas anteriores, decidiram criar a sua própria ferramenta: Packwerk.

Packwerk

O que é o Packwerk?

Packwerk é uma ferramenta de análise estática utilizada para impor limites entre grupos de Rubi ficheiros chamados pacotes.

O que é um pacote?

A pacote é uma pasta que contém código carregado automaticamente. A pasta equipa incentiva a utilização das melhores práticas de conceção na criação de pacotes.
- Devemos juntar coisas que tenham um elevado nível de funcionalidade coesão,

Tipos de controlos de fronteira

Podemos impor limites de privacidade e de dependência, verificar as violações dos limites e as dependências cíclicas.

Packwerk na prática

Não existe uma única forma específica de estruturar ou reestruturar a sua aplicação ao criar pacotes. Neste artigo, vamos seguir a abordagem sugerida por
Stephan Hagemann em Modularização gradual para Ruby on Carris.

Escolher o projeto

É possível criar um novo projeto ou escolha um dos seus projectos. Decidi utilizar um projeto de código aberto chamado CodeTriage. É importante mencionar que precisamos de uma aplicação Rails 6, uma vez que Packwerk utiliza Zeitwerk.

Inicializar o Packwerk

Primeiro, precisamos adicionar a gem ao nosso Gemfile como gem 'packwerk' e, em seguida, executar feixena consola. Em seguida, estamos prontos para inicializar a gem executando packwerk init.

Depois disso, verificamos que Packwerk gerou três ficheiros para nós:

packwerk.yml é o ficheiro de configuração do Packwerk onde definiremos os ficheiros incluídos e excluídos, listaremos os caminhos de carregamento, definiremos o ficheiro de inflexões, entre outras coisas;

package.yml é o ficheiro de configuração de um pacote. Neste ficheiro, iremos adicionar a configuração para os limites do nosso pacote. Qualquer pasta com package.yml será reconhecida como um pacote pelo Packwerk. É isso mesmo, Packwerk criou o nosso primeiro
e chamamos-lhe o pacote raiz pacote.

inflexões.yml é onde colocaremos as nossas inflexões e acrónimos personalizados, caso os estejamos a utilizar.

Pode obter mais informações sobre os ficheiros e a sua configuração em
Packwerk.

Packwerk propriedades

Para que a modularização funcione, são necessárias três propriedades básicas: um contentor nomeado, o seu conteúdoe explícito dependências noutros contentores. Então vamos definir essas propriedades em Packwerk:

Outro ficheiro que não é incluído por defeito mas é recomendado é o README. Ele é importante para fornecer informações sobre o uso do pacote.

O Fim do Episódio I

Consultoria em desenvolvimento de produtos digitais

Ler mais

Ruby GraphQL. E quanto ao desempenho?

Carris e outros meios de transporte

Desenvolvimento Rails com TMUX, Vim, Fzf + Ripgrep

pt_PTPortuguese