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
