Empacote-se!

Lucas Trindade
Dec 12, 2018 · 3 min read

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!

Lucas Trindade

Written by

Brazilian, developer, technology enthusiast.