[Cascavel-pm] métodos de acesso mais sofisticados (era: acessórios de alteração mais sofisticados)

Alceu R. de Freitas Jr. glasswalk3r em yahoo.com.br
Terça Janeiro 8 08:17:00 PST 2008


--- Adriano Ferreira <a.r.ferreira em gmail.com>
escreveu:

> On Jan 8, 2008 10:43 AM, Alceu R. de Freitas Jr.
> <glasswalk3r em yahoo.com.br> wrote:
>
> Aqui vale lembrar que para fazer o Class::Accessor
> lhe dar getters e
> setters separados segundo o PBP (Perl Best
> Practices), basta usar
> 
> use base qw( Class::Accessor );
> __PACKAGE__->follow_best_practices();
> __PACKAGE__->mk_accessors( qw( sibling ... ) );
> 
> Mas isto é digressão e você provavelmente leu isto
> na documentação
> (http://search.cpan.org/perldoc?Class::Accessor).

Você diz assim?
http://search.cpan.org/src/ARFREITAS/DTS-0.03/lib/DTS/Connection.pm
:-)
 
> Acho que uma das formas possíveis de fazer isto é
> prestar atenção
> nesta recomendação:
> 
> "Modifying the behavior of the accessor
> 
> Rather than actually modifying the accessor itself,
> it is much more
> sensible to simply override the two key methods
> which the accessor
> calls. Namely set() and get().
> "

Acho que comi bola. Isso aqui eu não tinha visto.

> Assim acho que, sobrepondo o método set(), com um
> código similar a
> 
> # mapa dos atributos dependentes para aqueles de que
> eles dependem
> my %DEPENDENT_FIELDS = (
>       attribute => [ qw(sibling) ],
>       #sibling não tem dependencias, portanto não é
> incluído aqui
> );
> 
> sub set {
>    my ($self, $k, $v) = @_;
>    for my $dep ( @{$DEPENDENT_FIELDS{$k}} ) {
>         die "$dep deve ser definido antes de $k"
> unless defined
> $self->get($dep);
>    }
>    return $self->SUPER::set( $k, $v );
> }
> 
> Provavelmente alguma coisa parecida pode ser
> adaptada para suas necessidades.

Acredito que sim! Obrigado!

[]'s


Alceu Rodrigues de Freitas Junior
--------------------------------------
glasswalk3r em yahoo.com.br
http://www.imortais.cjb.net
-----------------------------------------------------------------------
A well-used door needs no oil on its hinges.
A swift-flowing stream does not grow stagnant.
Neither sound nor thoughts can travel through a vacuum.
Software rots if not used.
These are great mysteries -- The Tao Of Programming, 5.1


      Abra sua conta no Yahoo! Mail, o único sem limite de espaço para armazenamento!
http://br.mail.yahoo.com/


Mais detalhes sobre a lista de discussão Cascavel-pm