Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options

Re: OOP: How to construct multiple instances of a class at once

by tospo (Hermit)
on Nov 15, 2012 at 11:31 UTC ( #1003995=note: print w/replies, xml ) Need Help??

in reply to OOP: How to construct multiple instances of a class at once

As others have pointed out, it wouldn't be a good idea to make User return a collection. This is mostly a semantic issue: a User is a single person, so anybody who is unfamiliar with your software will rightly expect it to handle only one such entity and not return a list. This will include you in a couple of months time when you re-use the module and surprise yourself with the behaviour of your User class :-).

So, here is a different approach: why not have a UserList class? Objects of this class could be instantiated with a list of IDs and use a single DB query to get the data, then internally create a list of User objects from them, which it can then return. It would be used like this:

my @userlist = UserList->new( ids => [ 1,2,3 ] ); foreach my $user (@userlist){ print "user's name is: ".$user->user_name; }
The code for building the UserList object is basically what others have given you already but now you have an appropriately named class with a clear purpose.

Now, having said all of that, you are in danger of creating your own Object-relational mapper. Have you checked out existing solutions like DBIC?
You will see exactly those concepts there with a separation of sets of results and then the actual result, representing one row of data from the DB.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1003995]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (6)
As of 2018-06-23 09:02 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (125 votes). Check out past polls.