Re: Shimming The Moose Way
[email protected] (Niall Young) Thu, 10 Apr 2014 16:33:59 +1000 (EST)
| Newsgroups | perl.moose |
|---|---|
| Message-ID | <[email protected]> |
On Thu, 10 Apr 2014, Thalhammer, Jeffrey Ryan wrote: > I think that's basically what I have -- configurable factories via Bread::Board::Declare. > I just thought there might be a way to declaratively build them and their products. Can you categorise them down into a few mechanism types, and then define new syntax to represent and expand each out into a particular implementation of that underlying mechanism? > I could use the factories to apply my roles to the foreign objects at run time, but that still > leaves the foreign object exposed. Â I'm hoping to use composition instead, and hide the foreign > object completely. I've been storing eveything in an attribute slot with MooseX::Privacy's 'Private' or 'Protected' traits. However there are constraints around declaring them like that in a Role, something I want to explore when I get time. > But I can't always predict how the wrapper and foreign object are going to > connect with each other, so there probably has to be some procedural code to do the heavy > lifting. A single named Attribute in every case, whose type is determined or verified at runtime? A lazy attribute with a builder, or perhaps a BUILD* hook or something that looks after construction and type checking for you, but still lets you deal with them polymorphically like $factoryGeneratedBlah->instanceIsAlwaysHere() ? > you don't want to expose them directly to your app (because you will change them out later). > On a related matter, I'm having trouble deciding whether to use abstract base classes or roles > to define the interfaces. I'm finding sufficient use for interface Roles which just 'require' a bunch of unparameterised methods. I haven't had time to see how MooseX::Declare's method parameter interact here, as Private|Protected Attributes declareds in Roles has to take priority for me. If we can declare an interface with typed parameter slots, method signatures and all that jazz - I for one would find it incredibly useful, for the same type of de-coupling issues that you're dealing with above. > Â So that's pushing me towards abstract base classes. If we had Traits, with explicit conflict resolution in a matrix of slots at instance construction, then there's a much more useful 'abstract base class' than jumping through any consumption-order hoops, imho. > Anyway, using Moose has really helped me to think more about architecture. Â Probably because it > has saved me from the drudgery of thinking about accessors and constructors and types and so on. > Â I am very grateful for that. And there is much more for me to learn. Amen to that Brother! :-) I've never been as excited about Perl as I am now in 2014, dating back to 1996, and while much of this is because of Moose - I'm getting more and more excited about the possibilities that p5-mop-redux in core could help achieve, even if it is just the first tip of the wedge (re-implementing Moose on top of p5-mop-redux with attributes private to roles!!). -- Niall Young [email protected]