[Cascavel-pm] Parse de Endereço (Was: Re: Separando campos)

Solli Honorio shonorio em gmail.com
Quinta Março 22 10:49:18 PDT 2007


Eden, não é por nada não, mas acho que o código ganhou uma complicação
/abstração desnecessária. Eu prefiro a solução do champs.

Solli M. Honório

On 3/22/07, Eden Cardim <edencardim em gmail.com> wrote:
>
> On 3/20/07, Daniel Ruoso <daniel em ruoso.com> wrote:
> > Olha que hoje pra mim o código não me parece tão ruim assim... Acho que
> > os if's encadeados deixam mais claro as operações que estou fazendo...
> > Mas, para exercitar, como você faria?
>
> Eu sei que a pergunta não foi pra mim, mas já que o tema da semana é
> "padrões de projeto", eu usaria um Chain of Responsability. Seria algo
> assim:
>
> <untested code>
>
> package AddressExtractor;
>
> use Moose;
>
> has parsers => (isa 'ArrayRef', is => 'rw', default => sub {[]});
>
> sub add_parser {
>   push @{shift->parsers}, shift;
> }
>
> sub parse {
>   my($self, $address) = @_;
>   my @parsed;
>   foreach my $parser (@{$self->parsers}) {
>     last if @parsed = $parser->parse($address);
>   }
>   return @parsed;
> }
>
> package ParserA;
>
> use Moose;
>
> sub parse {
>   my($self, $address) = @_;
>   if($address =~ /^rua\,*\s*(.+)$/i) {
>     my ($t,$l,$n,$c);
>     #lógica de extração aqui...
>     return ($t,$l,$n,$c);
>   }
> }
>
> package ParserB;
>
> #etc...
>
> package main;
>
> my $extractor = AddressExtractor->new();
> $extractor->add_parser( ParserA->new() );
> $extractor->add_parser( ParserB->new() );
>
> my ($t,$l,$n,$c) = $extractor->parse("Av. Foo, etc...");
>
> </untested code>
>
> --
> Eden Cardim
> Instituto Baiano de Biotecnologia
> Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas
> Laboratório de Bioinformática
> --
> "you seem to think that 'close enough' is close enough...
> please learn to be 'literal' around programming."
> merlyn - on irc.freenode.net#perl
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070322/74d488cb/attachment.html 


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