DEV Community

Cover image for O que define um "módulo"?
Dayman Novaes
Dayman Novaes

Posted on

O que define um "módulo"?

Eu chamo de módulo, lato senso, qualquer "pedaço de código" minimamente coerente e organizado no mesmo espaço.
(seja no mesmo arquivo, ou na mesma função, ou na mesma pasta, ou num pacote de um package manager qualquer, etc).

E um módulo qualquer tem SEMPRE 3 características:

  • um funcionamento interno (que é o grande propósito de sua existência);
  • dependências (usa coisas de fora, de outros módulos);
  • um entry-point;

Entender isso é essencial pra navegar no mar infinito das tecnologias web atuais.
Uma pasta com vários arquivos pode ser ou não um módulo, dependendo dessa definição. Veja o exemplo abaixo:

Claramente essa pasta é um módulo. Porém, a pasta templates dentro dela não é um módulo por si só, pois não há entry-point, apesar de ter uma coerência.

Image description

Perceba que quando a pasta é um módulo ela tende a estar no singular. Quando é apenas um "organizador de arquivos" ela tende a estar no plural (templates/, Documents/, Downloads/, etc).

Observe no seu projeto atual e veja se ele segue essa regra.
Outra questão importante a se observar são as dependências. No exemplo anterior, há um arquivo que não tá muito coerente com os outros, que é o pdf-generator.js. Apesar disso ser um problema, não é um GRANDE problema, pois um módulo precisa de coerência MÍNIMA, não de PERFEITA.
Facilmente, o pdf-generator poderia ser movido para outro módulo, ou importado de um pacote externo ao projeto (usando npm por exemplo).

O que quero chamar a atenção, é que ao ler um código, você tem que ter MUITO CLARO quando que um fluxo COMEÇA e quando que ele SAI do módulo.
Isso pode parecer óbvio, mas não é. Lembre-se, um módulo recebe um input (através do entry-point) e através de seu "funcionamento interno" gera um output. Esse output nem sempre vai para quem chamou o módulo, e nem sempre será na última linha de código.

Como aqui, por exemplo:
Image description

Essas tripartição pode inclusive te ajudar a entender a diferença entre teste unitário e teste de integração.

Teste unitário:

  • testo APENAS o funcionamento interno. E faço isso simulando todas as dependências.

Teste de integração:

  • testo o módulo sem simular as dependências. Alguns frameworks, principalmente com pegada mais funcional, forçam o desenvolvedor a descrever explicitamente quais os inputs necessários e os outputs de cada componente (módulo).

Isso ajuda, até certo ponto. Mas é essencial que você incorpore esses conceitos na sua prática.

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more