The Codest
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Indústrias
    • Fintech e Banca
    • E-commerce
    • Adtech
    • Tecnologia da saúde
    • Fabrico
    • Logística
    • Automóvel
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
Seta para trás VOLTAR
2022-01-05
Desenvolvimento de software

Ruby on Rails modularização com Packwerk Episódio I

Nicolas Nisoria

Os seres humanos têm dificuldade em ver o panorama geral de um problema sem dedicar muito tempo e esforço. Isto acontece especialmente quando se trabalha com aplicações grandes e complexas. Quais são os efeitos secundários das minhas alterações? Porque é que esta linha aqui está a afetar os testes de uma parte remota da base de código? Não existe uma solução perfeita ou completa, mas a Shopify lançou uma ferramenta que provavelmente o ajudará a si e à sua equipa.

Introdução

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

  • Coesãorefere-se à medida de quanto os elementos de um módulo ou classe pertencem uns aos outros.
  • Acoplamentorefere-se ao nível de dependência entre módulos ou classes.
  • Limites: refere-se a barreiras entre código. Neste caso, uma fronteira de código refere-se a diferentes domínios de interesse dentro da mesma base de código.
  • ModularizaçãoProcesso de divisão de um sistema de software em vários módulos separados, em que cada módulo funciona de forma independente.

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.

  • Baixa coesão,
  • Acoplamento elevado,
  • Código esparguete.

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,

  • Os pacotes devem ser acoplados de forma relativamente flexível uns aos outros.

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 Rails.

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 referir que precisamos de um Carris 6 aplicações desde 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

  • package.yml

  • inflexões.yml

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:

  • Nome: O nome de um pacote é o seu caminho relativo a partir da raiz do diretório
    aplicação.

  • Conteúdo: Quando colocamos um package.yml numa pasta, todos os ficheiros na pasta são agora o conteúdo do pacote.

  • Dependências: Podemos definir dependências de outros pacotes adicionando a chave de dependências ao package.yml.

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

Artigos relacionados

Ilustração de uma aplicação de cuidados de saúde para smartphone com um ícone de coração e um gráfico de saúde em ascensão, com o logótipo The Codest, representando soluções digitais de saúde e HealthTech.
Desenvolvimento de software

Softwares para o setor de saúde: Tipos, casos de uso

As ferramentas em que as organizações de cuidados de saúde confiam atualmente não se assemelham em nada às fichas de papel de há décadas atrás. O software de cuidados de saúde apoia agora os sistemas de saúde, os cuidados aos doentes e a prestação de cuidados de saúde modernos em...

OCODEST
Ilustração abstrata de um gráfico de barras em declínio com uma seta ascendente e uma moeda de ouro que simboliza a eficiência ou a poupança de custos. O logótipo The Codest aparece no canto superior esquerdo com o slogan "In Code We Trust" sobre um fundo cinzento claro
Desenvolvimento de software

Como dimensionar a sua equipa de desenvolvimento sem perder a qualidade do produto

Aumentar a sua equipa de desenvolvimento? Saiba como crescer sem sacrificar a qualidade do produto. Este guia cobre sinais de que é hora de escalar, estrutura da equipe, contratação, liderança e ferramentas - além de como o The Codest pode...

OCODEST
Desenvolvimento de software

Construir aplicações Web preparadas para o futuro: ideias da equipa de especialistas do The Codest

Descubra como o The Codest se destaca na criação de aplicações web escaláveis e interactivas com tecnologias de ponta, proporcionando experiências de utilizador perfeitas em todas as plataformas. Saiba como a nossa experiência impulsiona a transformação digital e o negócio...

OCODEST
Desenvolvimento de software

As 10 principais empresas de desenvolvimento de software sediadas na Letónia

Saiba mais sobre as principais empresas de desenvolvimento de software da Letónia e as suas soluções inovadoras no nosso último artigo. Descubra como estes líderes tecnológicos podem ajudar a elevar o seu negócio.

thecodest
Soluções para empresas e escalas

Fundamentos do desenvolvimento de software Java: Um Guia para Terceirizar com Sucesso

Explore este guia essencial sobre o desenvolvimento de software Java outsourcing com sucesso para aumentar a eficiência, aceder a conhecimentos especializados e impulsionar o sucesso do projeto com The Codest.

thecodest

Subscreva a nossa base de conhecimentos e mantenha-se atualizado sobre os conhecimentos do sector das TI.

    Sobre nós

    The Codest - Empresa internacional de desenvolvimento de software com centros tecnológicos na Polónia.

    Reino Unido - Sede

    • Office 303B, 182-184 High Street North E6 2JA
      Londres, Inglaterra

    Polónia - Pólos tecnológicos locais

    • Parque de escritórios Fabryczna, Aleja
      Pokoju 18, 31-564 Cracóvia
    • Embaixada do Cérebro, Konstruktorska
      11, 02-673 Varsóvia, Polónia

      The Codest

    • Início
    • Sobre nós
    • Serviços
    • Case Studies
    • Saber como
    • Carreiras
    • Dicionário

      Serviços

    • Aconselhamento
    • Desenvolvimento de software
    • Desenvolvimento backend
    • Desenvolvimento de front-end
    • Staff Augmentation
    • Programadores de back-end
    • Engenheiros de nuvem
    • Engenheiros de dados
    • Outros
    • Engenheiros de GQ

      Recursos

    • Factos e mitos sobre a cooperação com um parceiro externo de desenvolvimento de software
    • Dos EUA para a Europa: Porque é que as empresas americanas decidem mudar-se para a Europa?
    • Comparação dos centros de desenvolvimento da Tech Offshore: Tech Offshore Europa (Polónia), ASEAN (Filipinas), Eurásia (Turquia)
    • Quais são os principais desafios dos CTOs e dos CIOs?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Direitos de autor © 2026 por The Codest. Todos os direitos reservados.

    pt_PTPortuguese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek cs_CZCzech pt_PTPortuguese