Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re: how do i implement alternate constructors for an object

by LanceDeeply (Chaplain)
on May 07, 2003 at 20:59 UTC ( [id://256379]=note: print w/replies, xml ) Need Help??


in reply to how do i implement alternate constructors for an object

Here's how I like to do this:

I prefer keeping one bless in my module. I don't like having to check multiple places in the module for the blessing. I've had some headaches because of that.

I also like to think that most my modules 'use' or 'contain' a database handle. So my modules don't inherit from DBI. Instead, I opt for a the some sort of singleton factory to get a $dbh instance. There are plenty of ways to do this, here's one that I've been using.

HTH

package MyApp::Ticket; use strict; sub new { my ($class,%args) = @_; my $self = bless {}; if ( $args{ticket_number} ) { $self->load( $args{ticket_number} ); } else { $self->init(%args); } return $self; } sub init { my ($self,%args) = @_; $$self{_time} => $args{'time'}; $$self{_trade_ref} => $args{'trade_ref'}; $$self{_adr_buyer_bank} => $args{'adr_buyer_bank'}; $$self{_adr_seller_bank} => $args{'adr_seller_bank'}; $$self{_ti_seller_pays} => $args{'seller_pays'}; return $self; } sub load { my $self = shift; my $ticket_number = shift; # # pull the $dbh from some shared location # like a singleton factory # my $dbh = GetDBH(); my $sql = "SELECT * FROM tickets WHERE id = ?"; my $sth = $dbh->prepare($sql) or die $dbh->errstr; $sth->execute($ticket_number); my $row = $sth->fetchrow_hashref; return $self->init($$row); } # # and then initialize tickets like so: # my $new_ticket = new MyApp::Ticket( time=>time(),trad_ref=>34567, adr_buyer_bank => 'blah', adr_seller_bank =>'blah, seller_pays => 99.99 ); my $new_ticket = new MyApp::Ticket( ticket_number => 12345 );

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://256379]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others scrutinizing the Monastery: (3)
As of 2024-04-25 16:25 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found