Re: Advice on Module name, please.

[email protected] (Fiachra O Donoghue)
Newsgroups perl.moose
Message-ID <[email protected]>
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 <[email protected]> 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
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.