Empacote-se!
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:
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.
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!