UpInside Treinamentos

Conheça o composer e saiba como ele pode ser útil gerenciando as dependências do seu projeto

Antes de colocar a mão na massa, é importante saber o real propósito da ferramenta composer e ainda quando ela pode lhe ser útil

Conheça o composer e saiba como ele pode ser útil gerenciando as dependências do seu projeto
  • Compartilhe esse post
  • Compartilhar no Facebook00
  • Compartilhar no Google Plus00
  • Compartilhar no Twitter
  • Compartilhar na UpInside

Salve salve galera, Gustavo Web aqui e nesse artigo vamos ver o tal do composer!

Essa ferramenta está sendo cada vez mais citada e utilizada pelos frameworks php que temos disponíveis no mercado, e o objetivo desse artigo é desconstruir pelo menos uma etapa do que você precisa conhecer sobre o composer para trabalhar com esse tipo de funcionalidade.

A primeira "etapa" que me refiro é saber o porque e pra que! O como a gente pode aplicar nos próximos artigo, basta me informar aqui abaixo na área de comentários se você quer saber mais como funciona, e eu posso desenvolver uma série de artigos e criar alguns projetos utilizando a estrutura que o composer fornece.

Dependência:

Antes de seguir com o conteúdo, vamos primeiro nos sincronizar do conceito que temos sobre dependência:

  • Dependência: Qualquer objeto externo ao seu código, que seu método precise para que tenha o perfeito funcionamento e execute sua atividade com sucesso.

Na maior partes do tempo usamos dependências na nossa aplicação, mesmo que a gente crie essas dependências... Até ai não há com o que se preocupar, mas a partir do momento que você depende de código de terceiros, é que surge a necessidade de ter um controle mais rigoso e simplificado.

public function execCompra(){

$cliente = $this->user;

$compra = new PagSeguro();
$compra->criaFatura();

if ($compra->faturaPaga() == true) {

$lead = new InfusionSoft();
$lead->addTag('buy_product', $this->user->email);

}
}

Claro que o exemplo acima é fictício, mas é somente para que você compreenda! O nosso método depende do perfeito funcionamento da Lib do PagSeguro que é o meio de pagamento e da Lib do InfusionSoft para marcar uma tag no nosso sistema de e-mail.

Agora algumas perguntas pertinentes:

  • Em qual diretório cada lib está alocada?
  • Quem é o responsável por invocar cada uma delas?
  • Qual é a versão atual? E se na próxima versão, ela não for retrocompatível com a minha aplicação?

O que é:

Composer é uma ferramenta que quando adicionada ao seu projeto php, controla e gerencia as dependências do projeto, sejam dependências suas ou de terceiros! A principal vantagem é a padronização do projeto, geração do autoloader e o controle de versão de cada dependência.

Pra que:

Provavelmente em algum momento, sua aplicação precisará se comunicar com ferramentas externas (orm, meios de pagamentos, e-mail marketing, sistema de logística, erp's, crm's...) e na grande maioria das vezes as empresas responsáveis por tais aplicações com a qual você vai se conectar, fornece uma integração (uma lib - library) na mesma linguagem que você está utilizando (que no caso estamos nos referindo ao PHP, javascript até o momento não entra nessa arquitetura).

É bem possível que você tenha que se conectar com mais de uma ferramenta ao mesmo tempo, e o composer surge para padronizar a organização dessas libs e gerar um autoload com o recurso já ativo dentro da sua aplicação. Como resultado disso, você tem de uma maneira bem mais organizada de ter todas as suas dependências já ativas e funcionais dentro da sua aplicação.

Todo esse controle que estou citando é controlado somente por um arquivo de configuração do composer do seu projeto! Você só pode ter um arquivo desse de configuração por projeto.

O composer irá ler esse arquivo de configuração do seu projeto e se encarrega de efetuar o download de todas suas dependências já na versão especificada e adicionar a entrada dentro do seu autoloader, com isso basta você adicionar um require('autoload.php') e já está tudo certo para programar.

Nesse formato, seu projeto passa a ter a famosa pasta vendor! É nessa pasta que fica concentrada as suas libs externas, e é claro que você pode configurar o seu composer para que seu projeto tenha outro nome... Mas aí já fica a critério do desenvolvedor :)

Quando trabalhar com composer:

É claro que não tem uma regra para isso! Mas geralmente você vai utilizar no seu projeto caso queira utilizar ferramentas externas e trabalhar de fato com dependência! No nosso caso aqui na UP não trabalhamos com dependências no geral... As nossas integrações, no geral executamos o download da lib e criamos classes personalizadas para interagir com as ferramentas externas. Um exemplo disso temos no Work Control® (CMS FullStack da Up), onde nativamente há a integração com o PagSeguro, mas há uma classe responsável (que por sua vez concentra toda a integração) por fazer a comunicação entre a lib oficial do PagSeguro e a nossa aplicação.

Trabalhamos nesse formato, pois o foco do WC é entregar uma solução personalizada sob medida e que de fato atenda as necessidades do cliente... E utilizando uma ferramenta como o composer vai ajudando muuuito o desenvolvedor a ser mais ágil, mas pode acabar limitando as funcionalidades que poderiam ser desenvolvidas, ou ainda, essa dependência ficar tão espalhada dentro do sistema, que numa atualização (que não seja retrocompatível) pode acabar causando um baita transtorno!

Conclusão:

Como sempre digo, nunca se tem somente uma resposta para a solução do problema... E aqui não é diferente! Trabalhando com o composer ou não, você pode ter consequências já previstas em cada um dos modelos. Estamos planejando internamente aqui, lançar uma versão 4.0 do WC já apto para trabalhar com o composer, mas ainda tendo uma camada extra entre a aplicação e a ferramenta externa para extrair o melhor de ambos modelos! Isso ainda está em fase de especulação, mas poderia ser uma alternativa :)

Nos próximos capítulos...

Vou me programar para criar uma sequência de artigos sobre o composer, e nos próximos post vamos subir o ambiente! Já lhe adianto... Desenvolvedor tinha que ser obrigatório a trabalhar com Unix! Tanto o Linux quanto o iOS tem algumas ferramentas úteis que fazem você ser bem mais produtivo, além de estar mais próximo do ambiente de produção. Você vai ver por exemplo que uma instalação utilizando o CURL é bem tranquilo e você faz isso com duas linhas de comando e já estará tudo pronto... No windows, é mais complicado (por incrível que pareça).

Alguns pontos que fazem os sistemas Unix serem mais atrativos para desenvolvimento:

  • Ambiente mais próximo que o de produção
  • Terminal integrado: Com isso você não precisa de um aplicativo para gerenciar o seu Git ou ainda para se conectar com o SSH do seu servidor
  • Variáveis ambiente do sistema operacional não requer reinicialização (Viva windows 10)
  • Instalação de pacotes através de comandos descomplicados
  • Acesso irrestrito ao sistema operacional
  • Controle e gestão de permissão dos diretórios eficiente

Você pode sim executar as mesmas funcionalidades no Windows, mas requer procedimentos e configurações a mais para atingir um nível mais próximo de desenvolvimento do ambiente Unix.

E você?

Me fala o que prefere! Pra qual lado você acredita ser o mais viável? Já trabalha com o composer em algum projeto? Qual tem sido sua experiência?

  • Compartilhe esse post
  • Compartilhar no Facebook00
  • Compartilhar no Google Plus00
  • Compartilhar no Twitter
  • Compartilhar na UpInside

Olá, deixe seu comentário para Conheça o composer e saiba como ele pode ser útil gerenciando as dependências do seu projeto

Já temos 11 comentário(s). DEIXE O SEU :)
Programação Criativa

Programação Criativa

Eu não vejo porque não utilizar o composer. Quando a gente não conhece a fundo dá mesmo um certo receio rs. Assim como tive com frameworks como Laravel e hoje não abro mão. São coisas que todo desenvolvedor deve saber utilizar ou ao menos conhecer, o que vai levá-lo a utilizar :^)

A pasta vendor é algo intocável que fica ali a cargo da aplicação, tanto que não é comitada pelo git. Ter um composer.json deixando claro quais são suas dependências, basta rodar o composer update e ter todas as dependências necessárias para o bom funcionamento do seu projeto.

É meu ponto de vista. Quem não conhece e gosta de fazer na mão é porque não utilizou a maneira dinâmica que o composer oferece. Vale a pena testar :^)
★★★★★DIA 03.10.17 15h05RESPONDER
Gustavo Web
Enviando Comentário Fechar :/
Wesley Reis

Wesley Reis

Gostei do artigo. Já tentei larga o windows, mas ele não me larga... kkk Tentei por alguns meses mas, logo tive uma recaída. Ainda largo esse trem..
★★★★★DIA 09.08.17 15h30RESPONDER
Gustavo Web, Everton Manoel
Enviando Comentário Fechar :/
Gustavo Web

Gustavo Web

Hahaha acontece! Mas cara, pega uma distrib boa do linux e você não volta mais :)

★★★★★DIA 09.08.17 16h57RESPONDER
Everton Manoel
Enviando Comentário Fechar :/
Wesley Reis

Wesley Reis

Qual distro vc usa no dia-a-dia? e qual você indica pra quem usa windows e quer migrar pra unix?
★★★★★DIA 09.08.17 21h31RESPONDER
Everton Manoel
Enviando Comentário Fechar :/
Glaydson Karl

Glaydson Karl

@Gustavo Web, também me encontro no mesmo problema de @Wesley Reis. Tento de todos os modos, porém, não consigo.

Mesmo trabalhando como back-end, tenho por paixão o design (não manjo muito) e, vejo muitos designers carentes de softwares bons para linux. :/

Ótimo artigo!
★★★★★DIA 09.08.17 21h57RESPONDER
Everton Manoel
Enviando Comentário Fechar :/
Gustavo Web

Gustavo Web

Eu trabalhava com o Ubuntu (oooo saudade que bateu), e agora utilizo o mac para trabalhar! Na minha opinião ubuntu é uma das melhores que tem para se trabalhar...


Quanto a parte visual realmente linux peca, afinal não tem pacote adobe para linux (embora você consiga emular com o wine por exemplo)

★★★★★DIA 11.08.17 13h26RESPONDER
Everton Manoel
Enviando Comentário Fechar :/
Diego Luiz Job Danni

Diego Luiz Job Danni

Eu acredito que ser compatível com composer iria trazer um valor agregado maior ao wc !
★★★★★DIA 07.08.17 17h54RESPONDER
Everton Manoel
Enviando Comentário Fechar :/
Adilio Gobira Neves Reis

Adilio Gobira Neves Reis

concordo com o @warlisson no fato de baixar as libs e fazê-las a grosso modo do meu jeito. Mas também uma boa dica pra quem quer ter um certo controle da aplicação.
★★★★★DIA 04.08.17 09h51RESPONDER
Gustavo Web, Everton Manoel
Enviando Comentário Fechar :/
Warlisson Miranda

Warlisson Miranda

Por mais que seja trabalhoso, eu prefiro baixar cada biblioteca, remover o desnecessário e então. utilizar a aplicação. Certa vez, tentei utilizar o composer, ele cria a pasta vendor e faz o download do arquivo e cria o arquivo json. Até ai tudo bem, mas quando fui ver os arquivos baixados, estavam tudo, ou seja, exemplo, readme etc.
Acredito que quando mais limpo for sua aplicação melhor. Sempre procurei evitar certas ferramentas, pois aparentemente facilita, mas por outro bagunça muita coisa.
Abraços.
★★★★☆DIA 02.08.17 21h31RESPONDER
Gustavo Web, Adilio Gobira Neves Reis, Marcos Vinicius, Caio Vargas, Everton Manoel, Francisco C De Souza
Enviando Comentário Fechar :/
Gustavo Web

Gustavo Web

Esse dilema realmente é uma coisa que cabe a intepretação de cada dev! Particularmente, eu também tenho essa opinião... Mas, estou estudando como ponderar isso para extrair o melhor de cada um dos lados.

★★★★★DIA 03.08.17 15h33RESPONDER
Adilio Gobira Neves Reis, Marcos Vinicius, Caio Vargas, Everton Manoel, Francisco C De Souza
Enviando Comentário Fechar :/
Warlisson Miranda

Warlisson Miranda

Confesso que tenho uma grande resistência em utilizar certas ferramentas... Mas acredito que deve ser ao fato de não conhecê-las bem.
Abraços.
★★★★★DIA 03.08.17 15h39RESPONDER
Adilio Gobira Neves Reis, Marcos Vinicius, Caio Vargas, Everton Manoel, Programação Criativa
Enviando Comentário Fechar :/
Enviando Comentário Fechar :/