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.

Top comments (0)