Regarding (2), I'd just export one method called, say, dbi2obj, and require that the desired object type (simple or complex, or whatever) be passed as a parameter.
On 28 March 2011 17:49, Sam Brain <s...@stanford.edu> wrote: > I would like ask the group for advice on module naming, as I have seen some > missteps in the past. > > I have written a small module which takes the output of > DBI::fetchall_arrayref() or its ilk, and generates Moose objects from it. > > Showing great imagination, I have called the module > DBIx::BuildMooseObjects. I picked "DBIx::" as the module's functionality > seems to fit the DBIx namespace. > > There are two main exported routines, rather clumsily named > mk_AoMobj_from_2d_array() and mk_complex_Mobj_from_2d_array(). The first > returns a (ref to) an array of (already-declared) Moose objects, the second > (a ref to) an array of complex, nested Moose objects (sub-objects declared > as "isa => 'ArrayRef[...]' " ) > > As an example, mk_complex_Mobj_from_2d_array() is used as (the text is from > the POD): > > In database SQL queries involving joins, where there is a one-to-many > relationship between the tables in the query, we often see "nested" data > output of this kind: > > <--- Patient ---> <--- Visit ---> <-- Test --> > Name | Sex | Age | MD Name | Date | Name | Result > --------+-----+-----+-------------+------------+--------+------- > J Smith | M | 35 | A Jones, MD | 12/08/2009 | B.P | 120/80 > J Smith | M | 35 | A Jones, MD | 12/08/2009 | Weight | 156 > J Smith | M | 35 | A Jones, MD | 03/19/2010 | B.P | 122/88 > B White | F | 53 | M Wright MD | 07/06/2005 | Chol | 190 > B White | F | 53 | M Wright MD | 07/06/2005 | ESR | 21 > B White | F | 53 | F Albert MD | 08/16/2011 | B.P. | 125/82 > > In this example a patient makes multiple visits to an MD, undergoing > multiple test per visit. > > package Test; > use Moose > has qw(name, result) => (is => 'rw', isa => 'Str'); > > package Visit; > use Moose; > has qw(date md_name) => (is => 'rw', isa => 'Str' ); > has Tests => (is => 'rw', isa => 'ArrayRef[Test]' ); > > package Patient; > use Moose; > has qw(name sex age) => (is => 'rw', isa => 'Str' ); > has Visits => (is => 'rw', isa => 'ArrayRef[Visit]' ); > no Moose; > > package main; > > use DBI; > use DBIx::BuildMooseObjects; > > my $dbh = DBI->connect(...); > > my $ary_ref = $dbh->selectall_arrayref( > "SELECT p.name, p.age, v.mdname, v.date, t.name, t.result > FROM Patient p, Visit v, Test t > WHERE p.pat_key = v.pat_key > AND v.visit_key = t.visit_key" ); > > my $patient_arry_ref = mk_complex_Mobj_from_2d_array ( > data => $ary_ref, > desc => [ > class => 'Patient', > name => 0, > age => 1, > Visits => [ > class => 'Visit', > md_name => 2, > date => 3, > Tests => [ > class => 'Test', > name => 4, > result => 5, > ] # tests > ] # visits > ] # patients > ); > > The integers after the attribute names (C<<md_name => 2>>, etc) are the > zero-indexed column numbers of the attribute in the SQL output. > > > So: > (1) Does DBIx::BuildMooseObjects seem a reasonable name, and > (2) Do others feel the same as I do, that the exported method names could > be less ugly (but in my case, can't think of better ones [insert metaphor > involving woods & trees]). > > All comments and suggestions welcome. > > Thanks, > > Sam Brain > > -- > Sam Brain > Department of Radiation Oncology > Stanford Medical Center > Stanford, CA 94305 > >