Category Archives: Blog

Inversão de Controle

A inversão de controle é um padrão de desenvolvimeto de software que introduz uma mudança no controle do fluxo de execução no seu programa. Ele faz um código de uso genérico (framework, sistema de eventos, biblioteca, etc…) ser o responsavel 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 responsavel por invocar | chamar | executar classes e funções dentro de um framework | biblioteca é o nosso código específico, seja para criar uma controller, seja para validar um e-mail, etc…

Uma forma mais simples de entender IoC é, você tem um código, alguém vai executar ele, mas não vai ser você é um método main, numa controller ou algo parecido. Algumafora do seu controle(fora do seu controle naquele código) vai invokar | chamar | executar ele.

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, eles seram explicados a seguir para deixar as coisa mais clara.

Programação Orientada a Evento

Em JavaScript, uma linguagem com um ótimo suporte a eventos, você pode pedir que um listener(função) seja executado quando determinado evento ocorrer, como exemplo mais simples e tangível para maioria dos mortais, executar uma função quando acontecer um clique do mouse, segue exemplo de 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 monitar seja a página foi a cada x tempo e executar a função. A alternativa com IoC mais é a solução 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 você usa ela sem saber. Segue um exemplo de código sem a injeção de dependência.

class TableCliente
{
    private $db;

    function __contruct()
    {
        $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 serie de problemas, dentre eles:

Problemas de manutenção: como exemplo, vamos citar o caso em que você queira que ao invés de usar a classe PDO, queria usar um outra que tem mais recursos e outras abstrações, você vai ter que alterar a chamada em cada classe e ter sorte pra não quebrar nada no processo.

Problema com testes, é mais difícil, ou pelo mais chato você programar testes unitários 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 de forma mais detalhada em um post especifico sobre o design pattern.

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

class TableCliente
{
    private $db;

    function __contruct($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 execução da execução foi tirada da sua mão e jogado para um evento de sistema, 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