Diferença entre helper, library e plugin no CodeIgniter

22 de fevereiro de 2010, em Passos Iniciais, por

Já tivemos a oportunidade de ver a estrutura de diretórios do CodeIgniter, mas o objetivo foi apenas explicar a funcionalidade de cada pasta. Dando prosseguimento aos artigos introdutórios sobre CodeIgniter, vamos conhecer mais um pouco sobre alguns dos tipos de classes que podem ser usados no CI, quais sejam, helpers, libraries e plugins.

Um pouco de história

Existem diversos subdiretórios na pasta application e, conforme pode ser visto no livro CodeIgniter for Rapid PHP Application Development (na data de publicação deste artigo, ainda sem tradução para a Língua Portuguesa), nas versões do CodeIgniter anteriores à 1.5, a estrutura de diretórios era diferente. Rick Ellis, o carecão-mor, resolveu fazer alguns incrementos no framework, mas, por motivos de retrocompatibilidade, teve que manter algumas coisas como estavam.

Então, tecnicamente falando, não há maiores diferenças entre se valer de um helper, library ou plugin para implementar determinada funcionalidade no CodeIgniter. O que há são diferenças conceituais que podem, à primeira vista, parecer inúteis, mas, seguindo sua parte conceitual e atentando-se às convenções que a maioria dos usuários de CI fazem, são importantes de serem respeitadas.

Vamos ver as diferenças básicas entre uma helper, library e plugin (o que é algo que suscita bastante dúvida no princípio dos estudos de CI) para saber o momento certo de criar e usar e em qual pasta devemos nos preocupar em alocar os arquivos de desenvolvimento. Em artigos futuros, cada um vai ser abordado com mais detalhes, exemplos e práticas de uso.

Helper

Como sugere o próprio nome, helpers são para ajudar com as tarefas (não que libraries e plugins não sejam, mas quiseram dar esse nome, então está dado). Cada helper é um conjunto de funções relacionadas a uma determinada “categoria de tarefas”  – por exemplo, um helper nativo no CodeIgniter é o URL Helper, então, esse helper provê funções específicas para se trabalhar com URLs.

Helpers não são orientados a objetos (OO), são simplesmente programação procedural simples. Cada função de um helper executa uma tarefa específica, sem depender e sem causar dependência a outras funções do mesmo helper.

Como pôde ser visto em outra ocasião, é aconselhado que os arquivos de helpers estejam armazenados na pasta /application/helpers (não falando dos nativos, que já ficam em /helpers).

Library

Conceitualmente, uma library serve para conter seu próprio código para extender as funcionalidades do CodeIgniter (ou criar funcionalidades específicas para sites/softwares). Usualmente, quando um programador vai fazer sua própria classe, com funcionalidades específicas para o projeto, é uma library que é feita.

Como consta no artigo sobre a estrutura de diretórios do CodeIgniter, por padrão, os arquivos de bilbiotecas criadas ficam em /application/libraries e os nativos em /libraries.

Plugin

Plugins funcionam quase que da mesma forma que helpers. A principal diferença é que um plugin fornece, geralmente, uma única função, enquanto um helper, geralmente, apresenta várias funções. Outra diferença é que helpers também são considerados parte do “sistema principal”, ao passo que plugins se destinam a serem criados e compartilhados pela comunidade CodeIgniter.

Não se assuste caso sua instalação do CodeIgniter não tenha o diretório /application/plugins, isso é normal. Caso você queira se valer de um dos plugins da comunidade ou criar o seu próprio (para posterior compartilhamento), basta que você crie a subpasta “plugins” dentro de “application”.

A partir da versão 2.0 do CodeIgniter, os plugins não mas existirão. Então, ficaremos somente a diferença entre Helpers e Libraries.

Diferença prática entre helpers, libraries e plugins

Como já comentado, não há maiores diferenciações práticas entre um helper, uma library ou um plugin, dada a tamanha flexibilidade e capacidade de adaptação a gostos pessoais que o CodeIgniter apresenta. Com o tempo, vai se pegando “o jeito” do framework. e é possível saber/diferenciar onde cada classe, arquivo ou função deve ser criado, extendido ou ampliado.

Em artigos futuros serão abordados helpers, libraries e plugins com mais detalhes (assine o feed do CodeIgniter Brasil para não perder), mas, certamente, é programando e testando bastante que você vai conhecer as melhores práticas e “manhas” do CodeIgniter.

14 comentários em "Diferença entre helper, library e plugin no CodeIgniter"

gravatar

Anderson  em 1 de março de 2010

Muito bom todos os artigos cara… Parabéns!

Cada dia que eu uso o CI, mais eu quero colocar coisas pra rodar com ele!

gravatar

Tárcio Zemel  em 11 de março de 2010

@ Anderson

Que bom, Anderson! Pode ter certeza de que fazendo isso, está fazendo um bom negócio!

Obrigado pelo comentário! Aguardamos suas visitas futuras!

gravatar

Eduardo  em 23 de junho de 2010

Se eu criar um classe que gera pdf apartir de um relatorio, eu devo colocar na library ou em plugin?

gravatar

Tárcio Zemel  em 6 de julho de 2010

Se pegarmos o conceito dado no artigo, “quando um programador vai fazer sua própria classe, com funcionalidades específicas para o projeto”, então eu diria que você pode fazer através de uma library.

Não sei bem quais as peculiaridades do projeto, mas dê uma olhadinha no Wiki oficial do CodeIgniter que alguns membros da comunidade já chegaram a fazer geradores de PDF.

Att

gravatar

Calebe Aires  em 20 de outubro de 2010

Gostaria de um artigo comentando o que REALMENTE virá de novo no CI 2.0

gravatar

Tárcio Zemel  em 27 de outubro de 2010

Conceitualmente falando, se seu gerador de PDF for feito com somente uma função, então seria um plugin.

Mas muito provavelmente, são várias. Juntando isso com o fato de que os plugins não mais existirão a partir do CI 2, aconselharia que você fizesse uma library.

Abraços!

gravatar

Tárcio Zemel  em 27 de outubro de 2010

Na verdade, estamos esperando o lançamento oficial para criar um artigo com as devidas mudanças. Neste meio tempo, leia o artigo de Phil SturgeonWeb, "CodeIgniter 2.0: Everything you need to know" e no change log oficial do CodeIgniter 2.

Abraços!

gravatar

Almir  em 23 de novembro de 2011

Comecei a trabalhar com CI esta semana, o que vi no framework, é que criamos coisas que não fazíamos antes, utilizando código seco. Criei um script que monta os formulários automaticamente, desenvolvi depois que o Helper "form" fez falta. Isto seria um helper então? será que compartilho com a comunidade? (mesmo que ainda seja simples)

gravatar

Tárcio Zemel  em 28 de novembro de 2011

Dê uma olhada no fórum e wiki oficiais do CodeIgniter. Se ainda não tiverem feito algo do gênero, vale muito a pena compartilhar, sim! :-D

gravatar

Renato  em 4 de maio de 2012

Um exemplo, tenho um sistema que quero migrar para o CI, nele tenho uma clase de busca de rastreamento nos correnhos que retorna um array, tenho uma classe de login, tenho uma classe do pagseguro. essas classes seriam libraries ?

gravatar

Tárcio Zemel  em 5 de maio de 2012

Muito provavelmente seria o caso de libraries, sim! Mas, dependendo das necessidades e uso, também pode ser um helper…

Dê uma olhada no artigo Como criar bibliotecas (libraries) no CodeIgniter para confirmar se é, realmente, o caso.

Att

Comente!