Bill
Yes, I have pondered the same question.

My current solution is to have a MooseX::Singleton class that defines all constants used in my database (and perhaps elsewhere in my application). e.g.

package MyApp::Constants;

use MooseX::Singleton;

has track_type_foo => (is => 'ro', default = 1);
has track_type_bar => (is => 'ro', default = 2);

----
Then, as per Moosex::Singeton I initialize it once at the start of my application.

MyApp::Constant->initialize;

----
Then I can use it throughout my application.

my $constant = MyApp::Constant->instance;

  sub foo_track_type_count {
    return shift->tracks( {
      track_type => $constant->track_type_foo,
      })->count;
  }

----
regards
Ian


On 23/04/2010 22:46, Bill Moseley wrote:

My music DB has CDs and each CD has many tracks.

In my CD source class I have helper methods.

    sub total_track_count {
         return shift->tracks->count;
    }


And for the sake of the example, I have a "track_type".

    sub foo_track_type_count {
         return shift->tracks( { track_type => 1 } )->count;
    }

    sub bar_track_type_count {
        return shift->tracks( { track_type => { -in => [2,3] } } )->count;
    }


I'm finding I need to know the track_type IDs in other code -- for
example, in validation code.  I don't want to hard-code the track_type
ids all over the place.  My question is how do you manage constants like
this?

One option is to have a constants module, i.e. "use MyApp::Const
'track_types'" that my result source uses.  Then any other code that
needs those constants also uses MyApp::Const.

Another option would be to define the constants in the Track source.

    sub bar_types { return [2,3] }


then back in the Cd class:

    sub bar_track_type_count {
        my $self = shift;

        my $bar_types = $self->result_source->schema->resultset( 'Track'
    )->result_class->bar_types;

        return $self->tracks( { track_type => { -in => $bar_types } }
    )->count;
    }


How do you manage constants like this?

BTW -- Can't I get the result class w/o building a resultset?  Something
like $schema->source( 'Track') ?





--
Bill Moseley
[email protected] <mailto:[email protected]>



_______________________________________________
List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/[email protected]


_______________________________________________
List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/[email protected]

Reply via email to