Archive for April, 2009

Doctrine ORM, Parte II

Wednesday, April 29th, 2009

Bom, como prometido, o segundo capitulo da Saga “Doctrine ORM” vou abordar questões simples como o download da ferramenta, “instalação”, e configuração da mesma, deixando a primeira aplicação para o terceiro post, devido sua extensão.

Para baixa o Doctrine ORM é muito simples, basta acessar a página de download oficial, e selecionar a versão desejada, eu aconselho a baixar a última versão stable (atualmente 1.1.0). Após o download, descompacte o arquivo, para o uso em produção você vai precisar somente da pasta lib e de seu conteúdo é claro, tomando como exemplo o ubuntu, vamos criar uma aplicação chamada doctrineTest em /var/www (com as devidas permissões de escrita na pasta):

$ cd /var/www
$ mkdir doctrineTest
# vá até a pasta Dotrine-1.x.x
$ cp -R lib /var/www/doctrineTest
# aproveita e cria o index.php
$ touch index.php
# vamos criar uma classe para autoload
$ cd /var/www/lib
$ mkdir Util
$ touch Autoload.class.php

Justo, agora já temos o inicio de nossa aplicação salva no diretório de site do apache, vamos começar a configuração e a entender tudo isso. Abra seu editor preferido (eclipse no meu caso), abra o arquivo lib/util/autoload.class.php, vamos fazer um pequeno truque para nos livrarmos dos includes.

class Util_Autoload
{
    public function autoload($class)
    {
        $path = str_replace('_', '/', $class) . '.php';
        require_once($path);
        return true;
    }
}

Feito isso, vamos ao nosso index.php, primeiro vamos configurar nosso autoload :)

/* Adicionando a pasta libs ao include_path do php */
$include_path  = get_include_path();
$include_path .= PATH_SEPARATOR . dirname(__FILE__) . '/lib';
set_include_path($include_path);
unset($include_path);

/* registrando nossa classe autoload */
require_once(dirname(__FILE__) . '/lib/Util/Autoload.class.php');
spl_autoload_register(array('Util_Autoload', 'autoload'));

Legal, a essa altura qualquer classe que quisermos carregar dentro de libs estará disponível, agora vamos abrir nossa primeira conexão com o banco de dados (no exemplo MySQL):

$dsn = 'mysql://username:password@127.0.0.1/doctrineTest';
$manager = Doctrine_Manager::getInstance();
$conn = $manager->connection($dsn, 'master');

Bom, agora já conseguimos conectar a aplicação com o banco de dados, para finalizarmos este capitulo vamos fazer um pequeno teste de conexão, certifique-se que o usuário no qual você está conectando tenha permissões de CREATE no banco de dados. Vamos criar uma tabela e depois inserir dados nela:

$conn->export->createTable('teste', array('nome' => array('type' => 'string')));
$conn->execute('INSERT INTO teste (nome) VALUES (?)', array('blogdoxorna'));

Legal, tabela criada, uma linha inserida, agora vamos ler pra ver se é verdade que tá gravando (claro, comentando a linha do create pra não dar pau!) ;)

$st = $conn->prepare('SELECT * FROM teste');
$st->execute();
$resultset = $st->fetchAll();
var_dump($resultset);

O que deve aparecer aí no browser é mais ou menos isso:

array
  0 =>
    array
      'nome' => string 'blogdoxorna' (length=11)
      0 => string 'blogdoxorna' (length=11)

Bom, encerro aqui o meu post, e lembrando que se eu sair vivo do #NOB #TwitteirosDeJoinville no Biergarten, eu posto a terceira parte ainda hoje 29/04 a noite ;)

Doctrine ORM, Parte I

Monday, April 27th, 2009

Eram meados de Outubro/2008 quando eu, que na época trabalhava em Brasília, no ministério da educação recebi um email com um convite interessante, participar do CONAPHP (Congresso Nacional de PHP), evento que seria realizado dentro do CONISL (Congresso Internacional de Software Livre), após ver a grade de palestras me interessei muito, pois lá estariam bons palestrantes como o Flávio Gomes (zend framework), Guilherme Blanco (Doctrine ORM), Elton Minetto (Desenvolvimento Web Escalável) entre outros. Essas três palestras me interessavam muito pois estavam totalmente de acordo com meus interesses e necessidades. Bom após a palestra do Guilherme Blanco sobre Doctrine, eu fiquei maravilhado com essa ferramenta, tanto que após a palestra dei um jeito de pegar o contato dele para poder tirar dúvidas e realmente começar a utilizar isso em meu trabalho. Voltei para Brasília, terminei a implantação do Zend Framework em minha equipe, fiz o acoplamento do Doctrine ORM dentro da estrutura do Zend Framework, e por uma sucessão de eventos vim para Joinville integrar a equipe da Drimio sob o “comando” de Elton Minetto. Mas tudo isso foi só para explicar como cheguei ao Doctrine ORM. A partir de agora sim, estarei fazendo uma breve introdução (na melhor das intenções) ao assunto.

O que é Dotrine ORM?

O Doctrine ORM, como seu próprio nome diz, é uma ferramenta de ORM (Object-relational mapping) ou no bom e velho pt-br: Mapeamento Objeto-Relacional. Foi concebida sob a licensa GNU Lesser General Public License. Suas principais influências foram o Hibernate(Java) e o ActiveRecord(Rails). Atualmente se encontra na versão 1.1.0 (estável) e é compatível com PHP 5.2.3+ pois o mesmo utiliza a biblioteca PDO.

Mas o que exatamente esse tal de Doctrine ORM faz?

Sua função simplificando, é reduzir a impedância do uso de Banco de Dados Relacionais e Sistemas Orientados a Objetos. Ele utiliza o Design Pattern Active Record para fazer abstração entre as tabelas do banco de dados e as suas respectivas classes, ou seja, para cada tabela no banco teremos uma classe correspondente. Sendo possível delegar a responsabilidade da criação das classes para o doctrine, mas isso é um outro assunto.

Legal, e tem mais? – Muito Mais…

Inspirado no HQL (Hibernate) foi criado o DQL (Doctrine Query Language) que eu acho muito bom, facilita muito na hora de criarmos consultas enxutas ou que tenham relacionamentos a serem pesquisados. Além disso há também a possibilidade de executar consultas com SQL nativo, mas é desencorajado, visto que uma parte do seu problema antes de usá-lo são justamente consultas com SQL nativos.

Fale-me mais Xorna, e é fácil para se achar? aprender mais? – É claro!!

Ele possuí uma boa documentação, com bastantes artigos, e uma comunidade de usuários que tende a crescer visto sua facilidade de acoplamento com frameworks populares. No próximo post daremos o ponta pé inicial em nossos estudos, mostrarei a instalação, estrutura de diretórios e começaremos nosso primeiro exemplo.

A teoria da tosa de porcos

Monday, April 27th, 2009

Antes de mais nada gostaria de esclarecer que o título desse post é meramente uma metáfora. Ela se refere a certas situações no dia-a-dia onde uma ou mais pessoas afim de resolverem um problema criam mais problemas, ao invés de manter a simplicidade na solução do problema.

Vamos aos fatos:

Há um problema que deve ser resolvido, na maior parte das vezes simples, há também interessados em resolver este problema, e na maioria das vezes há alguém querendo complicar tudo, talvez achando que quanto mais complicada a solução maiores serão seus méritos, mas o que na verdade faz é gerar mais problemas.

Por que Tosa de Porco ?

Bom, essa expressão é um “ditado” lá do bom e velho Rio Grande do Sul, que diz que algo está como “tosa de porco: pouco pêlo e muito grito”, ou seja, se fala demais, é perdido muito tempo em algo que está óbvio, prática comum entre pessos de ego inflado ou que necessitam diariamente de doses de reconhecimento por parte de colegas de trabalho e seus “chefes”. Não que isso chegue a ser defeito em uma pessoa, pois todos nós somos humanos, mas por favor, precisa fazer reunião pra decidir até a quantidade de pó a ser colocado no café da equipe? (rsrs)

A solução

Sem tosar nenhum porquinho, vamos rapidamente a solução. Você tem um problema, precisa partir do ponto A até o ponto B, a boa e velha matemática nos ensina que a menor distância entre dois pontos é uma reta, pronto, sem rodeios ou voltas parta em linha reta a solução do problema, sem criar mais variáveis dentro do mesmo problema. Como já dizia a Navalha de Occam:

  • pluralitas non est ponenda sine neccesitate (pluralidades não devem ser postas sem necessidade) *
  • entia non sunt multiplicanda praeter necessitatem (as entidades não devem ser multiplicadas além do necessário). Esta frase foi cunhada em 1639, por John Ponce de Cork. *

O blogdoxorna.com.br não tosou nenhum porquinho sequer ao postar esse artigo.

* Fonte: Wikipedia

Clicky Web Analytics