You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cactus-dev@jakarta.apache.org by Nicholas Lesiecki <nd...@yahoo.com> on 2003/11/01 16:35:29 UTC
Re: [Proposal/Vote] Breaking API in Cactus 1.6
I'm +1 for this refactoring, though I probably won't have time to help.
Cheers,
Nick
On 10/31/03 1:00 PM, "Vincent Massol" <vm...@pivolis.com> wrote:
> Hi,
>
> I'd like to perform a full overhaul of our package organization. The
> reason is that we are currently not showing our users what API is public
> and what API is not public. Unfortunately, Java does not provide a
> built-in solution for this.
>
> I'd like to propose to use the scheme used in Eclipse development (see
> http://www.eclipse.org/articles/Article-API%20use/eclipse-api-usage-rule
> s.html). Paraphrasing Jim:
>
> ----- proposal start here -----------
>
> To try to draw the line more starkly, the code base for the platform is
> separated into API and non-API packages, with all API elements being
> declared in designated API packages.
>
> - API package: a JavaT package that contains at least one API class or
> API interface. The names of API packages are advertised in the
> documentation for that component; where feasible, all other packages
> containing only implementation details have "internal" in the package
> name. The names of API packages may legitimately appear in client code.
> For the Cactus project, these are:
> org.apache.cactus.foo.* - API
> org.apache.cactus.foo.internal.* - not API; internal implementation
> packages
> org.apache.cactus.sample.* - not API; these are examples
>
> - API class or interface: a public class or interface in an API package,
> or a public or protected class or interface member declared in, or
> inherited by, some other API class or interface. The names of API
> classes and interfaces may legitimately appear in client code.
>
> - API method or constructor: a public or protected method or constructor
> either declared in, or inherited by, an API class or interface. The
> names of API methods may legitimately appear in client code.
>
> - API field: a public or protected field either declared in, or
> inherited by, an API class or interface. The names of API fields may
> legitimately appear in client code.
>
> Everything else is considered internal implementation detail and off
> limits to all clients. Legitimate client code must never reference the
> names of non-API elements (not even using Java reflection). In some
> cases, the Java language's name accessibility rules are used to disallow
> illegal references. However, there are many cases where this is simply
> not possible. Observing this one simple rule avoids the problem
> completely:
>
> - Stick to officially documented APIs. Only reference packages that are
> documented in the published API Javadoc for the component. Never
> reference a package belonging to another component that has "internal"
> in its name---these are never API. Never reference a package for which
> there is no published API Javadoc---these are not API either.
>
> ------- end of proposal -----------
>
> Committers, do you agree to refactor our packages to follow these rules?
>
> Here's my +1
>
> Thanks
> -Vincent
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: cactus-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: cactus-dev-help@jakarta.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: cactus-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: cactus-dev-help@jakarta.apache.org