[SP-pm] pool de objetos
Marcio Ferreira
marciodesouzaferreira at gmail.com
Thu Mar 22 09:01:35 PDT 2012
Li a thread do fim pro começo e parece que um Flyweight - até sugerido pelo
Eden - resolve isso.
Design Pattern resolve 99% dos problemas do dia-dia =P
On Mar 22, 2012 12:29 PM, "Eden Cardim" <edencardim at gmail.com> wrote:
> >>>>> "Tiago" == Tiago Peczenyj <tiago.peczenyj at 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/
> =begin disclaimer
> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
> SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20120322/7a202190/attachment.html>
More information about the SaoPaulo-pm
mailing list