On Jul 28, 2010, at 7:55 AM, Oliver Charles wrote: > On 28/07/10 06:08, Evan Carroll wrote: >>> with ::Role:: being in the middle of the name, rather than at the >>> beginning or at the end. >>> >> Again, I'm not sure this answers anything at all. Would it make more >> sense to put ::Moose:: in the package name of classes that used Moose >> internally? If no, why? What is your opinion if someone creates a >> WiX3::XML::Tag that is non-Role Moose class. I'm just not sure why >> people want this. If people want to shop for roles that they can use >> to enhance their Moose classes, why not just add the functionality >> into search.cpan, or Meta.yml. ... What if the Role is some how >> fundamentally more often useful as a Trait? Should it be published as >> WiX3::XML::Trait::Tag. >> >> it just seems like we're using package names to store random crap >> about the module that has nothing to do with the *name* of the module >> and is much better inferred and indexed on the content of the module. >> Being a Trait has very little to do with the *function* of the module. >> A Trait isn't all that far from any other module that uses SubExporter >> for method-install. Should we give those a separate namespace? >> > > I think having Role:: in the package name is important, and it does convey > information about the function of a module. A role has a use case that is > substantially different from a class - you do not instantiate it, you compose > it. For this reason alone, I personally enjoy the separation of instantiable > objects - my classes - and roles. This is not dissimilar to the C++ practice > (or perhaps it's Java) of prefixing all interfaces with an "I" > > And yes, if a role is more useful on a per-instance basis as a trait, then I > do indeed put them in a ::Trait namespace. I find this to be particularly > self-documenting then - it's clear that this is neither a class, nor a role > that you should apply to a class, but a trait that should be applied to > isolated instances of a class. > > So no, I don't think we're storing random crap at all in the package name > here. You might consider it crap, but it's most certainly not random at all - > so please don't start getting overly subjective here. In regards to > SubExporter doing method installs, yes I would probably also put that in a > separate namespace - I believe this is what the Mixin namespace is for. > > -- > Oliver Charles / aCiD2
I use Role/Trait in the namespace only when it's not top-level and is specific to my particular distribution: Biome::Role::Locatable (BTW, this is the same with interfaces, such BioPerl's java-like ones like Bio::LocationI, but I'm starting to use Moose more often these days). chris
