Empacote-se!

Lucas Trindade
Tableless
Published in
3 min readDec 12, 2018

Qual desenvolvedor nunca teve que aproveitar pedaços de código de um projeto em outro? Ou ainda descobriu que aquela classe que vários projetos utilizam tinha algum bug? Apresento-lhes os pacotes!

Pacote (ou package, em inglês) é um pequeno agrupado de código totalmente isolado, independente e autossuficiente, que tem como objetivo fornecer uma solução para o qual seu escopo se propõe. Confuso?

Simplificando: código isolado para fornecer algum recurso para seu projeto.

Você pode se perguntar: Mas eu já faço isso quando crio dentro do meu sistema uma classe para, por exemplo, validar os dados do meu formulário! É verdade, mas ela está presa ao seu projeto, precisando utilizar o famoso copiar/colar quando necessário reaproveitar, e pode até conter alguma dependência que faça ela ser difícil de ser incorporada em um novo universo.

Por conta da característica de total isolamento, o pacote é a solução ideal para reaproveitamento de códigos comuns em projetos, além do bônus de eventuais bugs necessitarem de correção apenas uma vez, e com um comando de atualização no gerenciador de dependências replicar a modificação em todos utilizadores.

Criando um pacote

Sem mais teorias, vamos colocar a mão na massa. Utilizarei para os exemplos deste artigo códigos escritos em PHP, a principal linguagem que trabalho atualmente, juntamente com seu gerenciador de dependências, o Composer.

Saber sobre composer (ou gerenciadores de dependências) é essencial para o entendimento deste artigo. Caso ainda não conheça nada a respeito, sugiro o estudo prévio.

Criaremos neste artigo um pacote simples para validação de dados, com a seguinte estrutura de arquivos:

estrutura de arquivos de um pacote

Entendendo a imagem acima:

Diretório src
No diretório src teremos as classes que farão a ação que o nosso pacote se propõe, no caso, validar informações

Diretório tests
Dentro de tests, como o nome sugere, os testes dos códigos que criamos. Não é obrigatório, mas é altamente recomendado

.gitignore
É o arquivo de ignore do git para possíveis arquivos que não precisam ser versionados. Opcional

README.md
README.md é o arquivo que irá conter a documentação do nosso pacote. Utiliza a sintaxe do markdown.

composer.json
É o arquivo mais importante (depois do código de src, é claro) para o nosso pacote funcionar. Contém os requisitos, palavras-chave, dependências e licença do pacote, entre outros.

Abaixo um exemplo de composer.json válido para pacote:

Linha 2 — Nome do seu pacote
Linha 4— Palavras-chave
Linha 7 — Requisitos mínimos para instalação e dependências
Linha 10 — Dependências de desenvolvimento
Linha 13 — Namespace para autoload do composer
Linha 18 — Namespace de desenvolvimento para autoload do composer

Disponibilizando o pacote

O repositório oficial de pacotes do composer é o Packagist. É possível utilizar outros repositórios caso queira um pacote privado, ou simplesmente não utilizar o packagist, porém recomendo fortemente, pois é onde a maioria dos usuários fazem as buscas por soluções, e de quebra você colabora com a comunidade de desenvolvedores.

Para publicar, primeiramente o código deve estar disponível em algum repositório git, como github, bitbucket, gitlab, etc.
Em seguida, deve-se acessar o packagist, efetuar login e clicar em Submit, no canto superior direito.

topbar do packagist.org

Após, colar a url do repositório e clicar em Check, e em seguida, Submit.
Pronto! O pacote está publicado.

Instalando um pacote

Para utilizar o pacote basta executar no terminal, no diretório do projeto onde o composer estiver disponível, o comando composer require NOME_DO_PACOTE, onde “NOME_DO_PACOTE” é o nome definido no composer.json, no nosso caso, lucastrindade/validation. No packagist é fornecido o comando para instalação de cada pacote. Após instalado, basta utilizar as classes do diretório src conforme a documentação do mesmo.

O código gerado por este artigo está disponível no github. Clique aqui para acessar.

Espero que tenham gostado. Dúvidas, sugestões, críticas? Fiquem a vontade para comentar logo abaixo. Até a próxima!

--

--