[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