KISS - Keep it simple, stupid!

13 práticas para se tornar um melhor desenvolvedor CakePHP

postado por João José Pedrini em 21/01/2009 20:43:15

Acredito que estou completando mais de 1 ano e meio de desenvolvimento com CakePHP e neste período quebrei muito a cabeça, entreguei vários projetos e, com certeza, aprendi bastante. Por isso, queria compartilhar com vocês algumas práticas que aprendi que me permitiram chegar ao conhecimento que cheguei. Por enquanto colocarei “somente” 13 práticas e não me aprofundarei em cada tópico, em outros posts explicarei mais cada prática.

1 º – Linux

As práticas não estão em ordem de importância, mesmo porque eu não sou um grande fã do Linux. Mas tenho que reconhecer que ele é um grande ambiente de desenvolvimento. Lógico, quando você não sabe mexer com Linux e não está acostumado com linha de comando, tudo será odioso. Mas digo a vocês, mesmo eu sendo um windeiro de carteirinha, minhas habilidades de desenvolvimento melhoraram bastante depois que comecei a usar o Linux. Hoje, não consigo desenvolver uma linha de código no Windows. Recomendo a todos a tentarem ficar um mês programando só no Linux, tenho certeza que não voltarão para o Window. Para aqueles que não sabem utilizar Linux, dou uma dica: tentem pedir para algum amigo linuxzeiro para ser seu tutor, isto economiza muitas horas de procura no Google!

2º – Utilizar VirtualHosts para configurar ambientes de desenvolvimento

VirtualHosts é um recurso do Apache que permite criar vários Hosts em uma única instância do servidor HTTP. A muito tempo quero falar sobre VirtualHost e configuração de ambientes de desenvolvimento para CakePHP, mas sempre deixo pra lá, infelizmente não será neste post que falarei =). Esta prática não muda muito sua rotina de programação, mas pode melhorar em muito sua organização.

3º – Sistema de versionamento, GIT

Bem, sistema de versionamento é crucial para qualquer desenvolvimento com mais de 1 pessoa, mas sinceramente eu recomendaria você versionar mesmo que esteja sozinho. É incrível a capacidade que os SCM (source code management) possui de salvar nossas vidas! Esquecer o que você fez a uma semana atrás, nunca mais! Recentemente conheci o GIT, no começo não entendi muito o conceito dele, mas depois que começamos a utilizar aqui na empresa, vejo o GIT com outros olhos. Este sem dúvida foi um dos meus maiores crescimento como desenvolver nos últimos anos. Com certeza falarei mais sobre ele.

4º – Desenvolvimento orientado a Testes

Já falei sobre TDD em algumas oportunidades aqui no blog e no grupo CakePHP-Tuga, mas nunca será o bastante para falar sobre essa impressionante técnica. Sabe quando você faz um investimento grande que no começo só te trás prejuízo? Aqueles investimentos que você se pergunta se realmente valerá a pena? E no final você recebe muito mais do que tinha previsto? Eu vejo TDD desta forma. TDD é um investimento de longo prazo, que necessita dedicação e comprometimento, mas rende muito mais que simplesmente uma aplicação testada. Eu gosto muito de TDD, ainda não me comprometo nem me dedico o suficiente, mas nas vezes que pratiquei fui muito bem recompensado. Sempre estou tentando falar sobre testes automatizados aqui no blog pois acredito que todos os desenvolvedores deveriam aderir a essa idéia.

5º – Extensões do CakePHP

Utilizar um framework e não aproveitar a organização que ele proporciona é quase uma burrice. No CakePHP temos 5 possibilidades de extensões: Component, Behavior, Helper, DataSource e Plugin, sem contar as classes de Shell. Estas extensões, quando bem utilizadas, permitem você reaproveitar muito seus códigos. Eu costumo falar nas minhas apresentações que Component, Behavior e Helper é o meio que o core team do CakePHP deu aos desenvolvedores para programarmos do jeito “orientado a objeto de ser”. Portanto, utilizem sempre que possível! Recentemente tive um contato maior com Plugins e gostei muito do que eu vi, vou pesquisar mais e tentar falar alguma coisa aqui.

O bom das extensões são as possibilidades de troca de conhecimento. Ser um melhor desenvolvedor também é saber utilizar bons códigos. Além do Bakery, sempre acompanho bastante o movimento dos desenvolvedores CakePHP no GitHub, vocês podem procurar por CakePHP ou mesmo ver alguns dos repositórios e usuários que estou seguindo.

6º – Participar da comunidade

Entrar no grupo de discussão, fazer, comentar ou acompanhar blogs, freqüentar o canal do IRC, publicar extensões, traduzir documentação, reportar bugs,  etc! O importante é participar! Eu, ainda, não faço tudo isto mas faço o possível. Acredito que o contato com pessoas é melhor forma de se melhorar, participar da comunidade é a melhor forma de se manter em contato com as pessoas, portanto, participar da comunidade é a melhor forma de crescer. Tenho certeza que você aprenderá todos os dias participar de metade do que estou dizendo. Eu particularmente tenho inveja da comunidade Rails brasileira, a comunidade Rails é tão importante que determina tendências. Eu participei do RailsSummit e vi isso na pele.

7º – IDE

Eu sei que irei entrar num ponto polêmico mas eu sou um defensor das IDE’s. Eu particularmente acredito que tenho muitos ganhos utilizando IDE. Se sua máquina possibilita utilizar, utilize. Aqui no blog já falei sobre o Komodo, que é minha IDE, até existe uma extensão do CakePHP para ele, vale a pena experimentar.

8º Implantação automatizada

Eu ainda não faço meus deploys automaticamente, mas estou estudando muito sobre. Não existe nada mais chato que enviar site para o servidor… SEMPRE esqueço alguma coisa. Automatizar a implantação é a maneira mais prática e rápida de colocar seus sistemas no ar, sem contar que você poderá criar diversas rotinas de segurança que manualmente seria um “pé no saco”. Para aqueles que querem pesquisar um pouco, recomendo ler sobre Capistrano.

9º Linha de Comando

Para quem é linuxzeiro sabe o que eu estou dizendo. É impressionante a capacidade que tem uma única linha de comando. Quando comecei a utilizar o linux odiava ficar abrando o Bash para poder fazer o que eu queria, agora, eu faço quase tudo com linha de comando. O problema agora que estou tão acostumado que aperto F12 até quando quero ir no banheiro =/.

10º Debug

Eu queria não ter que debugar, mas infelizmente nada é como queremos. Então, ter a prática de debugar é primordial. Em framework debugar é ainda mais interessante, pois são poucos os desenvolvedores que se preocupam em saber “de onde” vem a mágica dos framework. Debugando você pode ver cada pulo que suas requisição dão.  Já expliquei aqui como se faz para debugar aplicações CakePHP com Komodo.

11º Cache

Técnicas de cacheamento são importantíssimas hoje em dia, ainda mais com o efeito Digg a solta.  Eu vi o poder dos caches em um dos meus sites com CakePHP, no caso foi necessário cachear a página inicial, sem isso não conseguia responder nem 1 req/s.

12º Ler código

Sempre é bom ler um código, sempre se aprende uma técnica nova, um algoritmo novo, uma função diferente, etc. Recentemente tenho lido bastante o código do CakePHP e tenho aprendido bastante. Lendo código não fico preso à boa vontade dos programadores para documentar uma determinada funcionalidade, sempre estou a frente das novidades. E ler os testes é ainda mais vantajoso, desafio a todos, antes de perguntar como se utiliza uma determinada função do Cake, dar uma olhada nos testes.

13º Desenvolvimento Ágil

A última mas não menos importante: desenvolvimento ágil. Acho que tudo que falei até agora pode ser resumido em desenvolvimento ágil. Acho que depois que descobri o D.A. minha vida mudou, juro! Melhorei muito como programador e estou sempre melhorando. Mudei até mesmo o meu jeito de pensar. Aqui na empresa utilizamos XP em tudo que podemos, na verdade é a filosofia da empresa. Gostaria que mais pessoas entendessem sobre metodologia ágil.

Bem pessoal, acho que é isso, vou tentar escrever melhor sobre cada assunto desse. Espero que vocês utilizem estas práticas, não que esse seja o melhor caminho, mas acho que pode ajudar. Boa sorte aos programadores e aquele abraço!

Tags: , , , , , , ,
Topo

5 Comentários

Debug de aplicações CakePHP no Komodo IDE

postado por João José Pedrini em 17/09/2008 17:04:39
Tags: , ,

O Komodo IDE permite elaborar um ambiente de desenvolvimento bem completo, mas não seria completo se não tivesse um debugger PHP acoplado. Neste post, vou comentar como debugar uma aplicação CakePHP através do Komodo IDE.

Primeiro, vocês terão que configurar a IDE para poder rodar o debug. Isto não é muito difícil, na janela Edit -> Preferences -> Languages -> PHP exite um botão de configuração passo-a-passo, não terão muita dificuldade.

Agora que está configurado, vamos explicar um pouco a estrutura do CakePHP. Como vocês sabem, mesmo que sua aplicação não utilize mod_rewrite, o framework utiliza um sistema de roteamento. O que é isto? Router é uma funcionalidade do CakePHP que reescrever as URL’s de forma a deixa-las mais amigáveis. Quando você entra num URL http://endereco.com/posts/ver/1, não quer dizer que você acessou o arquivo “1” da subpasta “ver” da pasta “posts“. Neste exemplo, está sendo instanciado o PostsController, executando o método “ver” e passando por parâmetro o inteiro “1“.

Mas o que isto têm haver com debugar? Bem, todo o debug tem que ter um ponto de partida, em aplicações normais você procura debugar somente aquele arquivo que você sente necessidade. Porém, como a arquitetura do CakePHP foi desenvolvida de forma a sempre passar através do sistema de rotas, vamos ter que nos preocupar com alguns detalhes antes de sair escovando os bits. Portanto, precisamos nos preocupar com o primeiro mandamento do debug de aplicações CakePHP:

Inicie sempre o debug no arquivo webroot/index.php de sua aplicação.

Isto garantirá que você está passando pelo sistema de roteamento. Mas passar somente pelo Router não fará você alcançar o código que você deseja analisar, você terá que identificar a rota que o roteador deverá passar. Isto dá base para nosso segundo mandamento:

Configure a variável $_GET['url'] com a rota necessária

Aqui que está o pulo do gato. O que vamos fazer é simular o acesso de algum usuário a uma determinada rota. Utilizando o exemplo do post, para analisar o código do método “ver”, seria necessário setar a variável $_GET['url'] com “/posts/ver/1″.

Tela de configuração do Debug

Tela de configuração do Debug

Vamos começar um debug (eu utilizo o F5, mas existem várias formas de começar a debugar). O Komodo irá abrir uma janela de configuração. O que é mais importante é que vocês utilizem o CGI Interpreter com o checkbox de Simulate CGI Environment acionado. Isto é necessário para podermos simular um requisição em um servidor HTTP normal. Você perceberão que acionando o Environment abrirá duas novas abas de configuração. Bingo! É na aba CGI Input que vamos adicionar uma variável GET de nome ‘url’.

Adicionando a variável 'url'

Adicionando a variável "url"

Agora é só dar OK e pronto, já estamos debugando o CakePHP. Para adicionar os breakpoints há várias maneiras, eu clico na barra cinza no lado do código. Mas vocês podem utilizar o Debug -> Add/Edit Breakpoints

Pronto pessoal, agora é só debugarem suas aplicações. Recomendo a todos debugarem pelo menos uma vez com o breakpoint no início do index.php. Assim vocês poderão ver passo a passo como o CakePHP renderiza uma página.

Tags: , ,
Topo

2 Comentários

Configurando CakePHP no Komodo IDE

postado por João José Pedrini em 27/08/2008 00:47:51

Eu sou usuário do Komodo IDE, um editor baseado na plataforma do Mozilla. Como recentemente tenho trabalhado bastante com CakePHP, acabei criando um ambiente de desenvolvimento bem legal e vou compartilhar com vocês (não reinventei a roda, mas vou dar mais algumas dicas).

Umas das principais funções de uma IDE é o auto-complete, sem isto é preferível utilizar um editor qualquer. Para fazer com que o Komodo identifique as classes de Cake você deverá informar para a IDE aonde se encontram os arquivos do framework. Portanto, vá até Edit -> Preferences -> Languages -> PHP. Adicione o diretório raiz do core do CakePHP (local onde se encontram todas as classes do framework) e dê “Ok”. É interessante também você colocar o diretório do /vendors, caso exista alguma biblioteca externa no seu projeto.

Tela de Configuração dos diretórios

Tela de Configuração dos diretórios

Mas isto ainda não resolve tudo. Infelizmente, por ser um framework totalmente dinâmico, é impossível para a IDE identificar quais são os Helpers, Components e variáveis setadas pelo Controller. Ainda não inventaram nada que identifique as propriedades da classe para carregar a interface do objeto. Para falar a verdade, acredito que nunca irão inventar. Mas então, como fazemos?

Para os Components e Behaviors , podemos criar uma função privada (ou colocar underscore no início) instanciando todos os objetos que queira ter o auxilio, um exemplo de um Controller:

<?php
    function __completeComponents(){
        $this->Acl = new AclComponent();
        $this->Auth = new AuthComponent();
        $this->Cookie = new CookieComponent();
        $this->Email = new EmailComponent();
        $this->RequestHandler = new RequestHandlerComponent();
        $this->Security = new SecurityComponent();
        $this->Session = new SessionComponent();
    }
?>

Para os Helpers, utilizamos outra abordagem. Crie um arquivo PHP contendo o conteúdo abaixo e adicione ele como se fosse uma biblioteca do PHP (imagem acima):

<?php         
    $ajax = new AjaxHelper();
    $cache = new CacheHelper();
    $form = new FormHelper();
    $html = new HtmlHelper();
    $javascript = new JavascriptHelper();
    $number = new NumberHelper();
    $session = new SessionHelper();
    $text = new TextHelper();
    $time = new TimeHelper();
?>

Pronto, temos auto-complete em toda a nossa estrutura MVC. Meio gambiarra mas é muito útil. Diminui bastante as idas em API para lembrar de uma função, a ordem dos parâmetros e/ou uma pequena descrição.

Ps: Estou testando o Gist-it pois tomei uma azia com caracteres <> no Geshi

Tags: , ,
Topo

2 Comentários

Creative Commons License
Sou Ágil: KISS em http://kiss.souagil.com.br está licenciado sobre
Creative Commons Attribution-Share Alike 2.5 Brazil License.

souÁgil