On Thu, 23 Feb 2012 11:27:18 +0000 Pedro Melo <m...@simplicidade.org> wrote:
> Hi, > > On Thu, Feb 23, 2012 at 5:57 AM, Bill Moseley <mose...@hank.org> > wrote: > > I often have classes that abstract out the work of fetching data > > from multiple sources -- so I have attributes that hold instances > > of the objects that do the actual work. Each of these objects > > need their own config. > > > > I've used three approaches to pass config to the contained objects, > > but each seems a bit cumbersome. Just wondering if there's other > > ideas. > > I've come across the same problem often times, and I never got a > answer I was fully happy with. > > I've used two approaches in the past: > > 1. pass inner worker object fully created to the top level class: you > create the worker object with whatever configuration you want, and > then pass it in the top level constructor call; > 2. use dependency injection or some variation of the concept: either > have a singleton configuration manager and worker objects call into it > for configuration information, or pass a CodeRef configuration > callback to the top level object to be passed along to the worker > objects, to be used in the same way. > > On the whole I rather like dependency injection because on my use > cases I force the callers of the configuration manager to register > themselves with it, and allow me to reconfigure live whenever the app > receives a external event "there is new configuration available, > please adjust yourselves". When this happens, the configuration > manager can obtain the new configuration parameters, and signal all > the registered clients that they should reconfigure at their > convenience. > > Bye, If you end up doing DI, take a look at using Bread::Board since it makes such things pretty trivial. -- Nicholas Perez XMPP/Email: n...@nickandperla.net http://search.cpan.org/~nperez/ http://github.com/nperez