Category Archives: Blog

Inversão de Controle

A inversão de controle ou em inglês “inversion of control“, também conhecida pela sigla IoC é um padrão de desenvolvimeto de software que introduz uma mudança no controle do fluxo de execução do seu programa. Ela faz um código de uso genérico (framework, sistema de eventos, biblioteca, etc…) ser o responsável por invocar/chamar/executar um código de uso específico (uma classe ou função feita para resolver algo da sua aplicação) [4].

Essa abordagem é um pouco diferente do que normalmente fazemos, quando o responsável por invocar/chamar/executar classes e funções dentro de um framework/biblioteca é o nosso código específico, seja para criar uma controller ou para validar um e-mail.

Uma forma mais simples de entender IoC é: você tem um código e alguém vai executá-lo, mas não vai ser você em um método main, numa controller ou algo parecido. Alguma coisa fora do seu controle (nesse código) vai invocar/chamar/executar.

Alguns exemplos em que isso acontece são: programação orientada a eventos, design pattern injeção de dependência e nas controllers do MVC, que serão explicados a seguir para ficar mais claro.

Programação Orientada a Eventos

Em JavaScript (uma linguagem com um ótimo suporte a eventos), você pode pedir que um listener (função) seja executado quando determinado evento ocorrer, por exemplo, vamos executar uma função quando acontecer um clique do mouse, como no código:

function clickListener()
{
    alert('fui clicado')
}

document.body.onclick = clickListener;

Nesse código, em nenhuma linha foi feita uma chamada para função clickListener, quem faz essa chamada é o sistema de eventos do JavaScript quando acontece um clique na página.

Um jeito sem IoC para executar essa função no clique, talvez seja monitorar a página a cada x tempo e executar a função. A alternativa com IoC é a solução mais natural para este caso.

Injeção de Dependência

A injeção de dependência é um design pattern que altera a forma como as dependências são “chamadas” no seu código, caso você seja um programador “caprichoso”, provavelmente a usa sem saber. Segue um exemplo de código sem a injeção de dependência.

class TableCliente
{
    private $db;

    function __construct()
    {
        $this->db = new PDO('pgsql:host=localhost;dbname=test_basic01', 'userFoo', 'passBar');
    }
}

Perceba que estamos criando uma instância da dependência PDO dentro da classe TableCliente, isso pode gerar uma série de problemas, dentre eles:

  • Problemas de manutenção: como exemplo, vamos citar o caso em que você queira usar uma classe que tem mais recursos e outras abstrações ao invés de usar a classe PDO. Você terá que alterar a chamada em cada classe e ter sorte pra não quebrar nada no processo.
  • Problema com testes: é mais difícil testar, ou pelo menos é mais chato você programar teste unitário em códigos desse tipo se você não tiver um setDb então, vai ter que escrever algum código pra conseguir testar ou não vai testar.

Existem outros problemas, que vou explicar detalhadamente num post específico sobre o design pattern.

Para resolver esses problemas, deve-se alterar o design da classe para receber a dependência, alterando o “controle” de criação e injeção da dependência para outro código fora dessa classe. Normalmente se usa um IoC Container para tal tarefa ou algum código mais simples que faz o mesmo trabalho.

class TableCliente
{
    private $db;

    function __construct($db)
    {
        $this->db = $db;
    }
}

Exemplo simples de IoC Container:

class Container
{

    function getDb()
    {
        return new PDO('pgsql:host=localhost;dbname=test_basic01', 'userFoo', 'passBar');

    }

    function getTableCliente()
    {
        $db = $this->getDb();
        return new TableCliente($db);
    }

}

Utilizando o Container:

$ctx = new Container();
$tableCliente = $ctx->getTableCliente();

Controller MVC.

Uma controller no MVC é um trecho de código que é executado a partir de uma ação do usuário. Se for uma controller web, estaremos falando de requisições HTTP, se for um aplicativo desktop, vai ser o código que responde ao click de um botão. Os dois casos são muito parecidos, você pode entender que um código é executado externamente em um servidor web e o outro é local.

Como a execução foi tirada da sua mão e jogada para um evento de sistema gerado pelo usuário (o “controle” foi invertido), isso também é considerado IoC.

Referências

  1. http://martinfowler.com/bliki/InversionOfControl.html
  2. http://martinfowler.com/articles/injection.html
  3. http://pt.wikipedia.org/wiki/Invers%C3%A3o_de_controle
  4. http://en.wikipedia.org/wiki/Inversion_of_control

Flash Builder 4 (Flex 4) – Bug – Travamento na instalação

Boa tarde galera, eu estava a algum tempo tentando instalar o plugin do Flash Builder 4 (Flex 4) no meu Windows 7 x64 Professional Original, onde estava acontecendo um travamento depois de escolher a pasta do instalação do Eclipse(Helios x86), ele trava na primeira porcentagem de instalação.

O bug na instalação está relacionado ao nome das pastas, o instalador do plugin não te dá opção de onde extrair os arquivos, ele extrai em:
C:\Documents and Settings\Édipo\AppData\Local\Temp\Adobe Flash Builder 4 Plugin

No seu windows vai estar em:
C:\Documents and Settings\(Seu nome de usuário)\AppData\Local\Temp\Adobe Flash Builder 4 Plugin

No caso relatado:

http://translate.google.com.br/translate?hl=pt-BR&langpair=en|pt&u=http://forums.adobe.com/message/2714074

Vai pedir para você copiar a pasta de instalação do Flash Builder 4 que está em negrito:

C:\Documents and Settings\(Seu nome de usuário)\AppData\Local\Temp\Adobe Flash Builder 4 Plugin

Colar no C:\

Renomear de Adobe Flash Builder 4 Plugin para Adobe(Pode ser qualquer outro nome sem espaço ou caractere muito complexo, por exemplo o “É” de Édipo)

E executar o instalador que estará em C:\Adobe\Disk1\INSTDATA\VM

No caso, eu executei o InstallFlashBuilder4Plugin pelo prompt de comando como administrador.

Boa sorte a todos.

PetMag + Uol

PetMag + Uol

PetMag (Site pelo qual sou responsável pelo front-end) fechou nesse mês um parceria com Uol.

Com essa parceria, algumas materias do PetMag irão aparecem na home do Uol e Uol Bichos.

Parceria muito festejada pelos funcionários da Citrus7 e PetMag.

O projeto começou a ser pensado no ano passado (2008) e desenvolvido no começo deste ano (2009), foi lançado como versão beta e agradou muito aos internautas.

Parabéns a toda equipe do PetMag.

Parabéns Firefox, 1 Bilhão de Downloads

O Firefox chegou a marca de um bilhão de downloads, um browser que ajuda tanto os desenvolvedorers e seus usuários com seus add-ons.

Eu não poderia deixar passar esse dia em branco, por isso estou cintado o mesmo aqui no blog.

Então, fica aqui meu grande obrigado para todos os colaboradores no desenvolvimento do Firefox e a Fundação Mozilla, pois uso bastante esse browser, ele e seus add-ons.

Fica aqui o site que a mozilla fez para esse dia:

http://www.onebillionplusyou.com/

Salvar Kyle XY – Seriado ABC Family

Num dia de domingo me deparei com o SBT passando um novo seriado, Kyle XY, fiquei maravilhado com o seriado e resolvi baixar na internet. Bem, esta faltando somente o último episódio da terceira temporara para eu ver e tenho me deparado com a situação de que o seriado foi cancelado pela ABC Family.
O Seriado é muito bom, e não entra na minha cabeça e nem de uma legião de fans, como isso aconteceu.
Por isso, algumas pessoas estão recolhendo assinaturas para salvar o seriado como já aconteceu com outro chamado Jerico.
Para quem esta acompanhando a série pelo SBT, pesso que ajudem, para não termos um seriado sem um fim, e com um “gostinho de quero mais que nunca vai acontecer”.

Segue o link do site que achei mais enpenhado com a campanha, e o link direto para voto pois o site é meio confuso.

Site
http://savekylexy.com/

Link direto para o voto
Salvar Kyle XY http://www.petitionspot.com/petitions/savekylexy