I was not aware of the versioning document. Thank you. A few more things
make sense now. It is still a bit bittersweet. In my opinion the interface
is a programmer's most terrific tool. It keeps him honest as well. I
understand your point though.

-Greg

On Wed, Jul 13, 2011 at 11:42 PM, Phil Steitz <phil.ste...@gmail.com> wrote:

> On 7/13/11 9:05 PM, Greg Sterijevski wrote:
> > Phil,
> >
> > "Fortunately for users, maybe less fortunately for developers, we
> > can't really "evolve" our API rapidly ....  This is why we
> > favor abstract classes over interfaces."
> >
> > Just so that I am sure I understand, let me restate the objection to an
> > interface. An interface approach is more likely to be used broadly, so
> any
> > changes which might be made would have a disproportionately large impact.
> Is
> > this correct?
>
> No, our rule is we make incompatible changes only in major
> releases.  See [1].  Changes to interfaces are incompatible changes,
> so whatever interfaces we define we have to be prepared to live with
> until the next major release.  We have no way of telling who is
> using what or how, so our rules are expressed simply in terms of
> source and binary compatibility.  Abstract classes can add
> (non-abstract) methods without breaking compatibility.  That is why
> we favor them where possible over interfaces.
> >
> > Isn't this a bit of a punt? On the surface the user gets a guarantee, but
> > the guarantee is a deadend. If we decide a different approach is
> warranted,
> > the object is deprecated and ditched at some point. More importantly, if
> it
> > is a successful interface isn't that a good thing?
> >  If it makes its way into
> > a lot of other code, then I doubt we will need to make many changes.
> Also, I
> > foresee a two track evolution of features. The interface defines the
> basic,
> > most limited set of functionality. Everything else is throw into abstract
> > and concrete implementations. When a functionality seems to exist in most
> > derived classes, then the debate should commence about its inclusion in
> the
> > regression interface. The evolution would most likely be new features in,
> as
> > opposed to current features cut out. There would be a lag of probably a
> year
> > in moving a new feature up the inheritance structure to the interface.
> Maybe
> > your experience is different. I could be wrong about user demands...
>
> What it comes down to is being certain that the core material that
> we put into the interface is not going to change.  Our experience in
> Commons has been that that is often very hard to do and in most
> cases abstract classes will serve the same purpose without imposing
> the same kind of constraints.   The evolution you describe above is
> natural and bound to happen.  Trying to avoid interfaces gives us
> more flexibility in timing, enabling innovative change between major
> releases.
>
> Phil
>
> [1] http://commons.apache.org/releases/versioning.html
> >
> > Thanks,
> >
> > -Greg
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>
>

Reply via email to