On Wed, Jul 14, 2010 at 11:22 PM, Dave Rolsky <[email protected]> wrote:
> On Wed, 14 Jul 2010, Sam Vilain wrote:
>
>> I was catching up on the mailing list yesterday, and while I was not
>> surprised by the comment that the MooseX:: namespace should only be for
>> modules that extend Moose, I was surprised that MooseX::DataMapper -
>> despite being an extension specific to Moose classes, and despite being
>> a primarily trait-based API - did not meet the criteria.
>>
>> Perhaps someone has some thoughts on where the line should be drawn; for
>> the above I would have thought it was a Moose extension.
>
> This is tough to answer, but here's my take ...
>
> If a module is primarily focused on Moose itself, and adding some feature to
> it, it's likely to be a MooseX.
>
> If a module extends Moose, but primarily to add features relevant to some
> other domain, like Fey::ORM or Kioku, it's not a MooseX.
>
> If a module could conceivably be part of the core, it's probably a MooseX.
>
> If there's no way in hell a module could be part of the core (like PRANG),
> it's probably not a MooseX.
>
> If the module plugs into Moose, it might be a MooseX.
>
> If the module layers on top of Moose (again, like Fey::ORM), it's probably
> not a MooseX.
>
>
> So MX::DataMapper is ...
>
> A module which is primarily about another domain (ORMs and databases), it
> could never be part of core, and it adds a layer on top of Moose. Not a
> MooseX.
>

Basically what Dave outlines is the general heuristic we've used yeah.
To add another two examples to the fire, MooseX::POE and XML::Toolkit.

MooseX::POE replaces the Moose Instance Metaclass with one that uses a
POE::Session as it's instance. This is *deep* introspection into Moose
and really modifies the way Moose objects work at a core level. Hence,
MooseX. Even though there is no way in hell MooseX::POE would ever go
into Moose's core or even the Moose:: namespace.

XML::Toolkit (like PRANG) marshall's XML -> Moose and back again. It
is built a top moose, but it doesn't really alter the way Moose
functions. It doesn't really extend *moose* so much as make Moose
useful in more places (dealing with XML for example). Hence I chose to
put it in the XML namespace.

Hope this helps illuminate things.

-Chris

Reply via email to