Re: [CDBI] Different subclasses for one table / Factory Pattern?

Stephan Brunner <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.class-dbi
Message-ID <[email protected]>
Am Donnerstag 03 August 2006 18:43 schrieb Perrin Harkins:
> On Sun, 2006-07-30 at 21:19 +0200, Stephan Brunner wrote:
> > Right now, I have only one table for *all* files, but need to create
> > different File::<something> objects depending on column values (the file
> > name, for example). I want $dir->files() to return a list of objects in
> > the per-file-specific subclass. Is it possible to set this up using
> > Class::DBI?
>
> You can look at Class::DBI::Relationship::ISA or you can try making
> something yourself.  When I needed to do something like this, I made a
> class that just had the primary key and the class name for columns and
> provided a method which would fetch the correct class of object.  That
> does mean extra database fetches.

Perrin, thank you for the hint on ...::ISA. I looked at it, but, well, its 
docs read a bit like "better don't use this module";-)

Right now, I'm thinking about giving up my subclasses in favour of a method 
File->type() that tells me what kind of file I'm dealing with. I dislike the 
idea because I'll have methods in package File that are invalid for certain 
objects (for objects of wrong ->type()). But I like it because I can handle 
all this in my own code and get full control without digging into any 
inheritance internals. There are no additional database queries, and in the 
application itself, I don't really mind whether to use 
$file->isa('File::Foo') or $obj->type to decide what to do with a specific 
file.

Do I overlook something essential with this approach?

> - Perrin

Stephan
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.