[ 
https://issues.apache.org/jira/browse/JSPWIKI-38?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12659328#action_12659328
 ] 

Janne Jalkanen commented on JSPWIKI-38:
---------------------------------------

The Ruby on Rails folks have taught an important lesson: convention over 
configuration.  I think this is very powerful, and Stripes uses the same 
paradigm as well by defaulting to certain package naming conventions for its 
ActionBeans: in fact, they force you to have an extra level of depth in your 
package naming by assuming your ActionBeans lie in the ".stripes." or 
".action." packages.  In the same vein, I think the separation of the API 
classes into a separate hierarchy of their own does make sense by encoding the 
fact that they *are* API classes directly into the package names themselves.  
Much like the "plugin" in the package name means that these are plugins.

Now, I am not entirely certain whether moving practically all of our classes 
(save a few odd stranglers, perhaps ten or so for 3.0) into a .private 
-namespace makes sense either.  It is certainly not the simple solution that 
Andrew alluded to above, and will probably confuse developers.  Think about the 
two different messages: "You may use anything in the api-package, and that will 
be stable." vs "You may use anything under org.apache.jspwiki.* EXCEPT for the 
packages under private, and all those will be stable (except those 
aforementioned packages)"  There's a subtle difference, and I would much rather 
go for the first one than the second one.  Easier to communicate, easier to 
code, easier to understand and easier to build scripts for.  And, while 
creation of an "impl" -package might keep third party developers happier, it 
will annoy our current core developer base by introducing an extra layer.  
After all, *we* have to deal with those 350+ classes all the time.

However, we could make a cosmetic change by creating a JSPWiki API subproject, 
call it "jspwiki-api".  It's really all about switching a period to a dash, but 
it does not create any further nesting levels (though since most developers 
these days *do* use IDEs, I don't think any extra levels are really a problem). 
 So, we would have "org.apache.jspwiki" with the implementation, and 
"org.apache.jspwiki-api" for the API.

Other possibility is to treat these in reverse, but I don't really like the 
"impl" or "private" names.  There would need to be a better naming convention.

I guess my main objection is that since the aim of this project is to produce 
the wikiengine itself, not the API, I really don't like the idea that we give 
the API the first-class citizen treatment and force the actual implementation 
to some second-tier packages.  The org.apache.jspwiki -package should really be 
about the JSPWiki *engine*, not an abstract API class set.  If we had set out 
to do to create an API definition, then yes, then obviously we would do things 
differently, but I don't think API creation has ever been more than just an 
issue on this tracker.

If we wish to have a top-level package for the API, then perhaps a subproject 
with own dedicated package name might make most sense.

> Rename packages to "org.apache.jspwiki"
> ---------------------------------------
>
>                 Key: JSPWIKI-38
>                 URL: https://issues.apache.org/jira/browse/JSPWIKI-38
>             Project: JSPWiki
>          Issue Type: Task
>            Reporter: Janne Jalkanen
>            Assignee: Janne Jalkanen
>             Fix For: 3.0
>
>


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to