Re: Pattern for configuring child objects.
[email protected] (Dave Rolsky)
| Newsgroups | perl.moose |
|---|---|
| Message-ID | <[email protected]> |
On Thu, 23 Feb 2012, Bill Moseley wrote:
> Another common class I seem to have is one that maintains a list of "child"
> objects. For example, I might pass in a path to a directory and the class
> creates one object for each file in the directory.
>
> package Directory:
> use Moose;
>
> has directory => ( ... );
> has debug => ( isa => 'Bool', ... );
> has file_list => ( traits => ['Array'], lazy_build => 1, ... );
>
> sub _build_file_list {
> my $self = shift;
> return [ map { $self->file_class->new( { debug => $self->debug, path
> => $_ } ) } $self->files_in_dir ];
> }
>
> Not problem copying a few attributes like that, but some of my real child
> objects have much more config to pass around.
>
> Other more clever ideas?
I've thought about this a little. Building something like Class::Container
(https://metacpan.org/release/Class-Container) would be way, way easier
with Moose.
You could do it as a parameterized role, maybe:
with 'Role::Container' =>
{ contains => { bar => 'Foo::Bar', baz => 'Baz::Object' } );
This would introspect the relevant classes and either add attributes or
some sort of BUILD or BUILDARGS wrapper to record the relevant parameters
and save them for later.
-dave
/*============================================================
http://VegGuide.org http://blog.urth.org
Your guide to all that's veg House Absolute(ly Pointless)
============================================================*/