[Dbix-class] object as a value of result_class (resultset_class)

neil.lunn neil at mylunn.id.au
Tue Sep 20 12:24:39 GMT 2011


On 20/09/2011 7:59 PM, Roman Daniel wrote:
> In my app I store instances of several classes (subclasses) in one table.
> I try to implement a dispatcher which decides what class to inflate to
> according to row data loaded from db.
>
> It seems handy for this dispatcher to be an object instead of class.
> In DBIC the setter for result_class is implemented via set_component_class,
> which expects its argument to be a class - Class::Inspector->loaded is
> called on it.
I note that this is not really where you are going with this from your 
following passage, and that perhaps it's something you might find a more 
timely/lively discussion on irc about. I'm not do sure I'm all to hot 
about result_class being an object/instance rather than a class though.

However it seems to me that what you are generally describing is 
something in the mould of a Person -> Student, Person -> Worker, 
polymorphic set of relations in your data structure defined by the 
underlying elements.

So for my money, and I know this might sound like a lot of duplicative 
work, I'd being looking at implementing your dispatcher as a ResultSet 
processor inflating the result rows into the respective classed objects. 
Meaning think of this as an abstraction layer on top of the DBIC classes 
representing the "table" schema and more as the polymorphic object 
collection, aware of the underlying resultset objects.

There are varying approaches to this, from related tables for different 
object properties to object serialization/deserialization in something 
like a clob. Especially with the related tables approach and getting 
fancy with prefetch, I tend to prefer the abstraction approach.

>
> I can overwrite set_component_class to fallback to set_inherited when
> its argument  is a blessed object, but I am not sure whether the whole
> idea is not weird. If not do you plan to allow result_class to be an
> object? (it can be set to object even now but a warning is issued by
> Class::Inspector)
>
> I appreciate any comment
>
> Roman Daniel
>
> After I sent the message I noticed that result_class being a class is
> also expected in compose_namespace (used in
> Catalyst::Model::DBIC::Schema), where subclasses of result_classes
> are created.
>
> _______________________________________________
> 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/dbix-class@lists.scsys.co.uk




More information about the DBIx-Class mailing list