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