Padrões de Projeto (ou Design Patterns): o que são, para que servem e qual sua implicação de uso

16 de março de 2009, em Passos Iniciais, por Tárcio Zemel

Exemplo de Diagrama Entidade-Relacionamento (DER).

Quem já programa com linguagens OO (orientação a objetos) certamente trabalha ou, pelo menos, já ouviu falar, dos Padrões de Projeto ou Design Patterns. Os mais “vivenciados” na arte de programar já devem, inclusive, ter implementado um Padrão de Projeto em algum sistema ou software.

Mas nem todos conhecem os Padrões de Projeto e alguns sequer ouviram falar a respeito; por isso, neste artigo, falo um pouco a respeito dos Design Patterns. Para entender melhor o assunto, é preciso ter, pelo menos, noções de programação orientada a objetos – dê uma lidinha em nossa página Pré-requisitos para saber se você está apto a continuar a leitura.

O que são Padrões de projeto ou Design Patterns?

Primeiramente, vamos ler um trecho da definição de Padrões de Projeto da Wikipédia, onde consta que os Padrões de Projeto

descrevem soluções para problemas recorrentes no desenvolvimento de sistemas de software orientados a objetos. Um padrão de projeto estabelece um nome e define o problema, a solução, quando aplicar esta solução e suas conseqüências.

Excelente esta definição da Wikipédia. Para entender melhor, ainda, vamos pegar a definição mais objetiva de José Carlos Macoratti, que, em seu site, no artigo sobre o padrão MVC, define:

Padrões de projetos são soluções para problemas que alguém um dia teve e resolveu aplicando um modelo que foi documentado e que você pode adaptar integralmente ou de acordo com necessidade de sua solução.

Por exemplo, você está programando seu revolucionário sistema e percebe que será necessário ter acesso à uma instância de uma classe qualquer, e que esse acesso deve ser fácil e possível de ser feito em qualquer parte/página de seus códigos. Ao invés de você quebrar a cabeça e pensar em como fazer isso, utilize uma solução pronta! A solução para isso já existe – porque é uma situação muito comum em desenvolvimento de programas e se tornou um padrão de projeto – e seu nome é Singleton!

Quer dizer, corroborando ainda mais com a filosofia do “Não reinvente a roda!” – já comentada no artigo sobre frameworks -, os Padrões de Projeto existem para agilizar o desenvolvimento de aplicações e permitem que você “economize neurônios”, pois são soluções mais ou menos prontas para os problemas mais ou menos comuns do cotidiano de um programador.

E não se engane, pensado que padrões de projetos são “coisa de PHP”! Os design patters são soluções para problemas de software e, pense bem, uma solução para problemas genéricos não pode ficar restrita a uma linguagem específica. Portanto, conhecendo a solução que se quer, esta pode e deve ser aplicada não somente em PHP, mas em Java, Ruby, C#, .NET, e qualquer outra que você queira.

Para que servem os Padrões de Projeto?

Você já deve ter percebido que os Design Patterns servem para mostrar (ou demonstrar) soluções prontas para problemas que são comuns; soluções estas que podem ser implementadas em qualquer linguagem de programação.

O importante dos Padrões de Projeto são as definições dos problemas e a “melhor saída” para cada um deles. Através da análise de caso e de solução de uma situação, conhecendo os padrões de projeto você pode decidir qual usar, como usar e porque usar um padrão de projeto – se realmente for conveniente para o caso em foco.

Os padrões de projeto podem ser divididos por sua função ou escopo, sendo apresentados em 3 categorias principais, quais sejam, Padrões de Criação, Padrões Estruturais e Padrões comportamentais. Cada uma destas “categorias de padrões de projeto” contém os design patterns que são úteis a cada escopo.

Por exemplo, o padrão Singleton – que tem por objetivo garantir a existência de apenas uma instância de uma classe, mantendo um ponto global de acesso ao seu objeto – pertence à categoria de Padrões de Criação; o Adapter – que permite que classes com interfaces incompatíveis possam interagir entre si – pertence a Padrões Estruturais; e assim por diante. Confira uma boa listagem de padrões de projeto por categoria na Wikipédia.

Dando uma olhadinha no código fonte e pesquisando rapidamente em alguns tópicos dos fóruns oficiais do CodeIgniter, é possível observar que, dentre outros, alguns dos design patterns que o CodeIgniter implementa são:

Se alguém identificou mais algum padrão de projeto, basta comentar no artigo e eu complemento a listagem dos design patterns que o CodeIgniter implementa.

Na prática – e falando genericamente – não faz muita diferença para quem utiliza o CodeIgniter saber quais design patterns o framework usa nem exatamente como cada um deles funciona. Entretanto, saber disso auxilia você a “montar a tela mental” do “todo” e ter uma noção de como a “mágica” do CodeIgniter funciona!

Assine o feed CodeIgniter Brasil para não perder os próximos “truques”!  ;-)

CodeIgniter: framework PHP ágil, robusto e de alta performance

2 de março de 2009, em Passos Iniciais, por Tárcio Zemel

Codeigniter.

Para quem programa/trabalha com PHP – e outras linguagens de programação, também -, sabe que o tempo de desenvolvimento é uma das coisas importantes a se considerar em um projeto. De igual maneira, deve-se fazer web sites e aplicações web que sejam confiáveis e seguros, ao mesmo tempo que possuam boa performance e sejam rápidos.

É possível conseguir estes objetivos programando “na unha” – jargão conhecido entre os programadores”; entretanto, isso possui algumas desvantagens como, só para citar algumas:

  • Tempo “gasto” devido à preocupação com validações e segurança, em geral;
  • Preocupações com o “estilo” da codificação, haja vista o fato de eventuais compatibilidades entre servidores e versões do PHP;
  • Documentação;
  • Escalabilidade;
  • Combinar, de forma eficiente, leveza da aplicação e performance.

Para sanar, ou, pelo menos, amenizar, a maioria das questões apresentadas e outras mais, muitos programadores optam por utilizam um framework. Digo “um” porque, apesar da existência de inúmeros frameworks PHP, gratuitos ou não, o mais comum é o programador fazer alguns testes e escolher um só para trabalhar; escolher aquele que é mais consonante com sua metodologia e prática de programação – no caso, programação PHP.

Como você deve ter percebido pelo nome deste blog, aqui tratamos sobre o melhor framework PHP gratuito: CodeIgniter.

Sobre o CodeIgniter

CodeIgniter foi originalmente desenvolvido por Rick Ellis (CEO da EllisLab Inc.). O framework foi escrito para ter desempenho no “mundo real”, com muitos da classe bibliotecas, helpers e sub-sistemas baseados no código base do ExpressionEngine; atualmente é desenvolvido e mantido pela ExpressionEngine Development Team.

CodeIgniter, como bom framework que é, permite o desenvolvimento de web sites, softwares e aplicações em PHP de maneira ágil e relativamente descomplicada. O objetivo do CodeIgniter é disponibilizar um framework de máxima performance e capacidade, que seja flexível e o mais leve possível. Para conseguir estes objetivos, as bases do CodeIgniter são:

  • Instanciamento dinâmico. No CodeIgniter, componentes são carregados e rotinas executadas somente quando preciso, ao invés de globalmente;
  • Junção de componentes. Os componentes do framework são intercomunicativos, proporcionando alto índice de reutilização e flexibilidade dos sistemas baseados/derivados;
  • Singularidade dos componentes. No CodeIgniter, cada classe – e respectivas funções – é autônoma, o que permite elevar o grau de utilidade e o sistema, como um todo, ter mais performance.

CodeIgniter utiliza o padrão MVC

O conhecido e “consagrado” padrão MVC foi adotado no CodeIgniter. Todo o framework é baseado em Models, Views e Controllers; mas, diferente de muitos frameworks PHP, existe realmente uma flexibilidade muito grande! Por exemplo, um Controller não está “amarrado”, necessariamente, a um View e, inclusive, pode, este Controller, chamar diferentes Models e diferentes Views – torna-se muito fácil fazer templates, por exemplo.

Classes, bibliotecas e “helpers” nativos para diversas funcionalidades

Como bom framework PHP, CodeIgniter tem seus próprios excelentes recursos nativos, utilizados através de suas bibliotecas, “helpers” e classes que já constam no framework por default:

  • Calendários. Fácil criação de calendários, inclusive com criação de templates de formatação e exibição.
  • Bancos de dados. De maneira simples e rápida é possível: carregar databases, executar querys, manipular resultados de consultas, realizar transações (como se fosse PDO), fazer query caching, dentre outros.
  • E-mails. Enviar e-mails em protocolos diferentes (Mail, Sendmail e SMTP), envio de cópias e cópias ocultas, e-mail em texto puro ou HTML, enviar e-mail com anexos, ferramenta própria para debug, dentre outros.
  • Criptografia. Funções gerais de criptografia, através do uso de hashings e chaves.
  • Formulários. Criação de tags de formulário “on the fly“, tratamento de campos e informações, upload de arquivos, etc.
  • Manipulação de imagens. Redimensionar, criar miniaturas, rotacionar, cortar e inserir marca d’água.
  • FTP. Funções gerais de FTP, como mover, renomear, deletar, etc; e ainda uma função especial de espelhagem (“mirroring“), que permite criação dinâmica de diretórios no servidor a partir de arquivos na máquina local.
  • Compactação de arquivos. Manipulação, criação, controle e edição de arquivos compactados, sendo possível criar arquivos diretamente no servidor, acrescentar files diretamente e fazer downloads dos mesmos.
  • Controle de cookies sessões PHP. Manipulação e controle geral de cookies e sessões PHP, com todas suas funções, capacidades e potencialidades existentes.
  • Muitas outras funcionalidades. Muitas mesmo!

Material de aprendizagem, apoio e consulta

No do site do CodeIgniter há material de aprendizagem, apoio e consulta para as pessoas que usam o framework, através do Guia do Usuário, Wiki, fóruns, vídeo-aulas e exemplos e notícias, através de um blog oficial. Além disso, também há uma comunidade de programadores que utilizam o CodeIgniter e se ajudam mutuamente.

Gostou do CodeIgniter?

Através destas breves características do CodeIgniter já dá pra ter uma noção da potência do framework! Segundo o Top 10 PHP Frameworks, o CodeIgniter é o 3º melhor framework PHP do mundo (na data de publicação deste artigo)!  Entretanto, para você decidir se gosta ou não, realmente, é preciso que você baixe o CodeIgniter e faça seus próprios testes, faça seus primeiros sites usando o framework, seus primeiros sistemas e decida por si só.

Temos certeza de que você vai gostar e, qualquer coisa, estamos aí para ajudar! ;-)

O que é um framework: definição e benefícios de se usar frameworks

16 de fevereiro de 2009, em Passos Iniciais, por Tárcio Zemel

Framework: exemplos de estruturas de frameworks.

No web site oficial do CodeIgniter, vemos na definição que CodeIgniter is a powerful PHP framework. Quer dizer, presume-se que aquele que entrou no site do CodeIgniter já seja um programador PHP e saiba o que é um framework. Entretanto, algumas pessoas utilizam muito o termo “framework” e, inclusive, trabalham com frameworks, sem mesmo saber o que são, exatamente.

O que é um framework?

Existem muitas definições para “framework, feitas por muitas pessoas diferentes; algumas muito estudadas e que desenvolveram seus próprios frameworks, outras nem tanto, mas que buscam uma definição precisa para o termo.

Segundo a Wikipédia, framework

é uma estrutura de suporte definida em que um outro projeto de software pode ser organizado e desenvolvido. Um framework pode incluir programas de suporte, bibliotecas de código, linguagens de script e outros softwares para auxiliar no desenvolvimento e unir diferentes componentes de um projeto de software.

Realmente é uma descrição bem feita e que demonstra, de forma bem satisfatória, o que é um framework. Se alguém perguntasse para mim, minha definição não seria muito diferente. Seria algo como:

Framework é um conjunto de scripts feitos por pessoas mais inteligentes que eu para eu programar de forma mais rápida, fácil e eficiente.

Falando francamente e sem muito “tecnicinismo”, um framework não passa disso mesmo: um monte de arquivos organizados, com um monte de funções, rotinas e variáveis inclusas, que servem para nos poupar o tempo de “reinventar a roda” diversas e diversas vezes, para cada novo projeto.

Quais as vantagens em usar frameworks?

Você já deve ter percebido que há muitas vantagens em se usar um framework. Mas, para ser mais explícito, algumas das vantagens em se usar frameworks são (a ordem não é por importância):

  • Utilidade. O objetivo primeiro dos framworks é auxiliar no desenvolvimento de aplicações e softwares. Para tal, eles têm funcionalidades nativas das mais variadas, que ajudam você a resolver as questões sobre programação do dia-a-dia com muito mais qualidade e eficiência.
  • Segurança. Os bons frameworks são projetados de modo a garantir a segurança de quem programa e, principalmente, de quem usa o que foi feito a partir dele. Não se preocupe mais com aquelas intermináveis linhas de código para evitar um SQL Injection, por exemplo; com frameworks, a parte de segurança já “vem de fábrica”.
  • Extensibilidade. Os frame works permitem que você extenda suas funcionalidades nativas. Se aquela biblioteca de envio de e-mails por SMTP não contempla todas as possibilidades que você gostaria, simplesmente extenda suas funcionalidades e as use como se fossem parte do framework (na verdade, elas serão).
  • Economia de tempo. O que você demoraria algumas horas ou alguns dias para fazer, você encontra pronto em um framework. Pense no quão trabalhosas aquelas funções de manipulação de imagens são; usando um framework que tenha isso, você só usa, e pronto.
  • Ajuda fácil. Os que desenvolvem framworks geralmente disponibilizam material de qualidade nos web sites ou repositórios oficiais, com uma vasta documentação a respeito. Além disso, os bons frameworks sempre têm uma comunidade de desenvolvedores dispostos a se ajudarem entre si. É um prazer para os que já sabem mexer ajudar os que ainda não sabem (embora a falta de tempo também seja uma realidade).

Considerações sobre frameworks

Existem, literalmente, milhares de frameworks disponíveis para as diversas linguagens de programação existentes. É importante, antes esta imensidão de “oferta”, optar por um que atenda a suas necessidades e que seja consoante a seu método e estilo de trabalho.

Inicialmente, pode parecer que usar um frame work é pior do que fazer uma “programação pura”. Entretanto, tenha certeza: vale a pena dedicar seu tempo nisso! As vantagens vindouras de ter um projeto bem estruturado e rodando numa plataforma segura e estável, realmente compensam!

Existem dicas de como escolher um bom framework, mas, já adianto, em programação PHP, o melhor é CodeIgniter!  ;-)

Página 6 de 71234567