Kohana3, novidades e mudanças!

Agosto já está no fim e tudo indica que ainda este ano será lançado o Kohana 3, uma nova versão que além de muitas melhorias vem acompanhada de muitas mudanças na sua estrutura. Tenho nos meus rascunhos já alguns artigos para revisar e publicar sobre utilização do Kohana, porém acredito que terei de atualizar os mesmos para que fiquem 100% compatíveis com esta nova versão.

Para quem tem pressa, a resposta está ai: a migração de aplicações Kohana 2.x para 3.0 não será automática e exigirá revisão em alguns pontos do desenvolvimento, a começar que partimos de MVC para HMVC

Que raios é HMVC?

Não complique!
HMVC (Hierarchical Model View Controller) é um padrão de design novo, porém muito semelhante ao MVC que você já conhece, adicionado de uma hierarquia no design original do MVC. Quando uma requisição URI for solicitada, qualquer parte do MVC pode chamar outro item da hierarquia, o que permite o desenvolvedor uma maior flexibilidade e modularização do sistema que estiver utilizando. A vantagem é que se você quiser continuar com o padrão MVC, nada vai impedir você trabalhar desta forma.

Bootstrap

Quem me conhece sabe que eu odeio não gosto muito bootstrap do Zend Framework. O ZF é uma plataforma invejável tanto pela sua estabilidade como pelas suas características, porém montar arquivos de bootstrap decentes no ZF nunca foi sucesso pra mim. Sei lá, acho que fiquei mal acostumado com o Kohana onde eu ligo o carro e saido acelerando, e no ZF eu tinha que toda vez parafusar as 4 rodas e calibrar todos os pneus antes de sair rodando a aplicação :)

Voltando ao assunto, KO3 terá um bootstrap dedicado, porém você não vai precisar sair montando um do zero e sofrer horas para deixar ele funcionando: um bootstrap padrão que atende praticamente todas as aplicações já fará parte do pacote, somente o tunning da aplicação ficará por sua conta, como você já fazia no Kohana 2.x

Arquivos de Configurações

Boa parte dos arquivos do diretório application/config e suas diretivas também foram movidas para o arquivo de bootstrap. Quem já teve contato com Zend Framework estará bem familiarizado com esta mudança.

Controllers viraram Classes

Os controllers que estavam em /application/controllers vão para /application/classes/controllers.
Libraries e Helpers seguem o mesmo padrão e são todos classes agora, tudo fica mais organizado e OO.

Estrutura de diretórios e autoloading do KO3 também mudou: Uma nova convenção de arquivos foi desenvolvida de forma que simplifica a identificação e localização de classes. Todas as classes fazem uso do sublinhado (_). A estrutura de nomes é separada, como anteriormente, mas você vai notar uma diferença no formato.

Teste_Controller agora será Controller_Teste (/application/classes/controller/teste.php)
Kohana_Session_Cookie corresponde a /system/kohana/session/cookie.php

Ainda quero fazer alguns testes com o novo driver ORM, porém não me sobrou tempo ainda!
Acho que com o lançamento oficial da nova versão (que hoje está em RC3) posso publicar uma análise mais voltada ao ORM, que será exclusivamente baseado no PDO

Utilizando Template_Controller no Kohana

O Kohana utiliza o padrão MVC para a construção de aplicações, e nas views é que toda a informação é mostrada em nossa aplicação. Todo o HTML, CSS, JS (e não só eles, como também qualquer XML, JSON, REST) é enviado pela view.

O Kohana tem um bom suporte nas views, inclusive para nested views, porém hoje vamos falar da Template_Controller. Quando você vai desenvolver um site/sistema/aplicação que tem um layout padrão, a Template_Controller é a ferramenta ideal. Veja como é simples utilizar:

Vamos criar um controller chamado Teste em application/controllers/teste.php

<?php defined('SYSPATH') OR die('No direct access allowed.');
class Teste_Controller extends Template_Controller {

// Você pode especificar qual template deseja utilizar, opcionalmente
public $template = 'view_padrao';

public function index()
{
$this->template->titulo		= 'Teste';
$this->template->texto		= 'Lorem ipsum dolor ...';
}
}

Por padrão, o Kohana invoca uma view chamada Template que deve estar em /application/views/template.php
Você pode facilmente mudar qual template deverá ser chamado, como fizemos no exemplo acima usando a view view_padrao

Na view que você especificar, você pode montar toda a estrutura que terá sua aplicação como você faria sem qualquer framework, utilizando esta view como template para seu projeto. Há mais exemplos de uso na documentação oficial.

Simples, não? É Kohana!
E é por isso que eu gosto :)

Boas práticas desenvolvendo em Kohana

Utilizar frameworks no desenvolvimento web está mais que provado que traz muitos benefícios na sua equipe de desenvolvimento. Para quem é aficcionado com prazos então, é uma prática totalmente favorável.

O uso dos frameworks passou a ser comum devido aos benefícios, garantido na maioria dos casos:

  • Maior produtividade utilizando de orientações a objeto e conceitos como DRY
  • Documentação –  que geralmente é deixada de lado no desenvolvimento pelos curtos prazos – torna-se muito mais fácil
  • Padronização, que vem a ser um problema grande quando há mais de uma pessoa no desenvolvimento do mesmo projeto

Dentre vários outros benefícios, ainda temos as Melhores Práticas no desenvolvimento de cada framework, sempre procurando aproveitar o melhor do melhor.

Caio Ariade escreveu um ótimo artigo falando do Kohana PHP: Boas práticas de desenvolvimento

Vale a pena investir em Ruby on Rails? Django?

Vejo muita gente que já desenvolve pra web ficar seduzida com as facilidades de alguns frameworks que estão na moda, que estão no topo da mídia especializada. Não é a toa que Ruby on Rails e Django realmente estão neste círculo de modinha, pois eles realmente facilitam a vida do programador.

Existem inúmeros artigos malhando o pau no PHP – vamos falar a verdade, todo programador web que se preze ao menos já programou algo em PHP, a não ser que você só viva no mundinho do Mac – por ele não ser produtivo quando comparado a Django ou ROR. Porém muitos esquecem que Django e ROR não são linguagens de programação, a maioria quando lê estes artigos simplesmente ignora que temos Pyton e Ruby por trás desta brincadeira.

Ora, como assim Bial?
Então o correto é comparar frameworks PHP com ROR e Django?
Sim, porque estamos falando de frameworks e não de linguagens de programação.

Neste quesito quem inovou muito foi o Ruby on Rails, tanto que frameworks PHP vieram a implementar e até copiar seu comportamento e algumas funcionalidades, como por exemplo o CakePHP.

Tá, mas eu preciso aprender uma nova linguagem?
Não necessariamente, há frameworks PHP que podem atender perfeitamente muitas funcionalidades bem bacanas do ROR e Django sem que você precise ter um tempo dedicado a uma nova linguagem e o seu tempo de maturação e experiência nesta nova empreitada. Um dos frameworks que utilizamos com boa frequencia e que nos dá agilidade no código com uma fácil escalabilidade e boa manutenção, é o Kohana PHP. Um framework totalmente strict PHP5, com suporte MVC e ORM, URL limpas e de uma pequena curva de aprendizado (eu diria que você trabalha efetivamente nele em questão de 1 ou 2 dias, é muito rápido até pra quem nunca viu MVC).

Não vou postar aqui um tutorial de “como criar um blog em 5 minutos”, porque isto já existe. Mas vou mostrar da mesma forma que a galera do Rails gosta de mostrar que são produtivos e vou mostrar como podemos trabalhar com uma tabela de produtos de forma muito fácil no Kohana. Para isto, precisamos criar nosso model:

class Produto extends ORM {}

Não, eu não esqueci código!
É só isto mesmo e tudo já funciona, legal não?

Para quem já conhece MVC, veja como é moleza trabalhar com os controllers

class Produto_Controller extends Controller {
//	Listando todos os produtos
public function todos(){
$objProduto = new Produto();
print_r $objProduto->find_all();
}
}

E nem precisei escrever uma linha de SQL! E você pode acessar isto em http://seusite.com/produto/todos. Note que o sistema de URL’s é limpo e bem prático. Veja outro exemplo onde acessamos algum produto pelo código

class Produto_Controller extends Controller {
//	Listando todos os produtos
public function todos(){
$objProduto = new Produto();
print_r $objProduto->find_all();
}
//	Procurando um produto pelo ID
public function procurar($id){
$objProduto = new Produto($id);
print_r $objProduto;
}
}

Se acessarmos http://seusite.com/produto/procurar/2 o sistema irá localizar o produto com o ID=2 sem que você precise escrever uma única linha de código SQL para isto. Muitos frameworks trabalham com recursos fantásticos que novatos adoram, como por exemplo a automágica para gerar telas administrativas e facilidades como gerar o banco a partir dos models, e fazer deploy por linhas de comando.

Porém quando você trabalha profissionalmente, geradores de código não são boas soluções para seus problemas, e felizmente em frameworks como o Kohana não precisamos de geradores de código automágicos para ter produtividade, pois temos controle real da aplicação sem comprometer agilidade e manutenção do código, sem contar que não são necessários escrever arquivos de deploy e executar tarefas em linha de comando. Você simplesmente ativa a aplicação no modo produção, e tudo está pronto no servidor.

Enfim, este não é um post para ensinar Kohana a fundo, pois há tutoriais disponíveis para isto. Nem muito menos para falar mal do Rails ou do Django, que estão na sua fase de vitrine. Porém, é pra mostrar a você que não é preciso aprender uma nova linguagem para ter produtividade no desenvolvimento para web, se você já programa em PHP.

Este artigo teve seus links propositalmente apontados para versões nacionais dos portais de linguagens/frameworks.