[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