[Dbix-class] Selecting Mixins with MI
Matthew Simon Cavalletto
simonm at cavalletto.org
Sun Jul 31 02:14:54 CEST 2005
Hello, and *delurk*.
I'm yet another CPAN author working in this space, and figured I'd
subscribe to see what you folks were up to and whether there was
anything I could learn for use in my DBIx::SQLEngine distribution.
I wasn't subscribed to the Class-DBI mailing list but read through
most of the recent discussion after the list closed, and wanted to
follow up on the "delegation vs. hooks vs. plugins vs. mixins"
thread. Each of those concepts can be implemented in different ways,
producing a certain amount of ambiguity, but I found the technical
portions of the discussion quite interesting.
I have also used the "dynamic MI mixins" approach and am quite fond
of it for allowing users to select various optional features,
including their own plugins.
I wrote Class::MixinFactory after I found myself implementing this
for yet another base class. There's not much too it: it creates new
packages that inherit from the base class and a flexible number of
mixin classes. It also uses its own re-dispatch method "$self->NEXT
($methodname, @_)" instead of NEXT's AUTOLOADer.
An example use is in DBIx::SQLEngine::Record::Class, which sets up an
ORM link between a caller's class and some data source, generally a
table with a primary key. Different classes may or may not need
caching, accessor generation, etc, so those are set up as optional
mixins.
I'll be taking a closer look at your code in the days ahead...
-Simon
More information about the Dbix-class
mailing list