[Dbix-class] Using Class::Std under-the-hood
Dan Kubb
dan.kubb at autopilotmarketing.com
Thu Aug 11 08:36:57 CEST 2005
Via IRC some of us have been discussing converting DBIx::Class to
using Class::Std under-the-hood. If you're not familiar with
Class::Std, you can find more about it here:
http://search.cpan.org/dist/Class-Std/
About a week ago I sent a message to the list about DBIx::Class::Field,
which will be rolled into DBIx::Class shortly. I used Class::Std
for everything underneath, more as an experiment than anything, but I'm
really happy with the results. So much so that we're considering
switching from using blessed hash objects to inside-out objects, and
using Class::Std as a base.
A few of the benefits to using Class::Std are: (there's more, read
the docs)
- Relatively simple to switch. I did it in about 10 to 15 minutes
per perl module. Granted, the code-base was relatively small, but
it was fairly painless and only took a couple of hours overall.
- It had the nice side effect of cutting out about 15% of my code
too;
since much of the standard boilerplate stuff is handled by
Class::Std.
- Strong encapsulation. It is impossible to access the underlying
data, except through a well defined interface which you control
completely.
- Automatic accessor/mutator creation. Can be controlled though to
provide both, either, or no external access.
- Automatic constructor creation.
- Mark any method as protected/private to prevent access to specific
methods from outside your inheritance tree.
- Handled multiple inheritance dispatching, similar in result to
NEXT, but simpler. Its easier to get things right. Check out
the CUMULATIVE tag to see more.
- A clean way to specify overload behavior for objects. Much
nicer than overload.pm.
- Simple ways to dump the underlying data structure should you
need it for debugging. One of the biggest complaints with
inside-out objects is that the data is so hidden you can't see
it when you're initially writing and debugging. With Class::Std
objects its easy -- you just do:
warn $self->_DUMP;
This will return a string representation of the internal state
of the object.
- Written by Damian Conway ;) He said the module had gotten a lot
of interest as OS Con. I presume this is partly because he
features
it in two chapters of his new book, Perl Best Practices.
- A very perl6-like syntax.
Anyway, its a pretty nice module and I recommend checking it out.
I could include more sample code, but the documentation is a better
than anything I could write at the moment ;)
We're looking to get some feedback before making any decisions. If
you've got anything pro or con to add, now's the time to speak up..
--
Thanks,
Dan Kubb
More information about the Dbix-class
mailing list