[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