[SP-pm] pool de objetos

Eden Cardim edencardim at gmail.com
Thu Mar 22 08:29:24 PDT 2012


>>>>> "Tiago" == Tiago Peczenyj <tiago.peczenyj em gmail.com> writes:

    Tiago> Humm... analisando o seu problema parece que o primeiro passo é
    Tiago> criar um repositorio que sabe "criar" os seus objetos. Vejo um
    Tiago> problema que é saber se o objeto esta inativo ou não, vc teria que
    Tiago> trabalhar com o destrutor.

Pensando bem, acho que o que o OP, quis dizer com ativo/inativo é que ele
talvez ele queira objetos com atributos intrínsecos (imutáveis) e extrínsecos
(mutáveis). Nesse caso, se "configura" o objeto singleton que vem do pool com
um outro objeto (o contexto), que em perl pode ser qualquer coisa, pra
baratear o custo de criação, e o Moose já vem com suporte pra tudo isso:

--8<---------------cut here---------------start------------->8---
package MyObj;

has foo => (isa => 'Foo', is => 'ro', required => 1);
has bar => (
  isa => 'HashRef',
  is => 'rw',
  clearer => 'clear_bar',
  predicate => 'is_active',
  traits => ['Hash'],
  handles => {
    baz => [ get => 'baz' ],
    quux => [ get => 'quux' ]
  }
);

package main;
my $pool = container 'MyApp' => as {
  service 'myobj' => (
    class => 'MyObj',
    lifecycle => 'Singleton',
    dependencies => depends_on('foo')
  );
  service 'foo' => 'bahhhh';
};

my $obj = $pool->resolve(service => 'myobj'); # pegar objeto singleton
my $guard = guard { $obj->clear_bar }; # criar "desativador"

$obj->is_active; # false

$obj->bar({ baz => 'moo', quux => 'oink' }); # configurar o contexto

$obj->is_active; # true
$obj->foo; # bahhhh
$obj->baz; # moo
$obj->quux; # oink
--8<---------------cut here---------------end--------------->8---

-- 
      Eden Cardim         Need help with your Catalyst or DBIx::Class project?
      Code Monkey                 http://www.shadowcat.co.uk/catalyst/
 Shadowcat Systems Ltd.    Want a managed development or deployment platform?
 http://edencardim.com            http://www.shadowcat.co.uk/servers/


More information about the SaoPaulo-pm mailing list