[Rio-pm] Consultas em array de objetos

Eden Cardim edencardim em gmail.com
Quarta Junho 3 09:52:56 PDT 2009


2009/6/3 Gilberto Jolti <gilbertojolti em gmail.com>:
> God damned! It's Perl!
>
> Funciona. Mas isso é razoável em um contexto orientado a objeto?

Não, não é... Razoável seria você indexar o campo onde você quer fazer
a busca. Pro caso do título:

my %obj_por_titulo = map { ($_->titulo => $_) } @objects;
return $obj_por_titulo{'Catcher in The Rye'};

Claro que pra isso funcionar não podem haver repetições de títulos
entre os objetos.
Pra buscar por outros campos, você precisa de outro hash praquele
campo, se o critério de busca envolve dois campos aí as chaves do
índice precisam conter os dois campos, etc...

O Ideal mesmo é que você tivesse um gerenciador de banco de dados como
o PostgreSQL pra fazer todas essas otimizações por você.

> Resolveu
> meu problema de agora, mas provavelmente eu vou ter que fazer alguma classe
> contendo uma interface que simplifique para outro programador o uso disso.
> Tem algo pronto para esse tipo de situação (CPAN)?

Não que eu conheça, mas taí uma boa ideia: DBD::PerlHash

$DBD::PerlHash::database = { books => \@objects };
my $dbh = DBI->connect('dbi:PerlHash');
$dbh->do('select * from books where titulo = ?', 'Catcher in The Rye');

Com a vantagem de ser trivial reaproveitar o código quando o sistema
mudar prum BD de verdade.

-- 
   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://edenc.vox.com/            http://www.shadowcat.co.uk/servers/


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