Hi Piyush,

Indeed the move to 1.0 was made too early, I didn't expect the initial
design to be so impacted by feed-back and comments... In order to attempt to
compensate, we'll have a series of 1.0 RC releases, see:
http://www.restlet.org/roadmap

Best regards,
Jerome

> -----Message d'origine-----
> De : Piyush Purang [mailto:[EMAIL PROTECTED] 
> Envoyé : jeudi 17 août 2006 10:54
> À : [email protected]
> Objet : Re: API design review
> 
> Hi Jerome, 
> 
> +1 for the move. 
> 
> One fact that troubles me is that we are already at/near version 1. 
> Isn't that a tad too soon? 
> 
> Please see my inline comments. 
> 
> On 8/16/06, Jerome Louvel <[EMAIL PROTECTED]> wrote: 
> > Following the recent questions and suggestions from Piyush 
> Purang, I've 
> > started reviewing and refactoring the API to make it more 
> inline with the 
> > current best practices. I'm basing my work on the following 
> guide lines: 
> > 
> >         1) Java API Design Guidelines by Eamonn McManus 
> >         http://www.artima.com/weblogs/viewpost.jsp?thread=142428 
> > 
> >         2) How to Design a Good API and Why it Matters by 
> Joshua Bloch 
> >         http://lcsd05.cs.tamu.edu/slides/keynote.pdf 
> > 
> >         3) How To Design a (module) API 
> >         http://openide.netbeans.org/tutorial/api-design.html 
> > 
> > The next beta release (b18) is moving along pretty well and 
> already contains 
> > many improvements in this area: 
> >  - All member variables are now private instead of protected. When 
> > necessary, we provide protected accessor methods for subclasses 
> 
> +10 
> 
> >  - There is now a clear dependency between API packages. 
> The only one 
> > exception to the rule is the org.restlet.Factory class. The result 
> > dependency tree is: 
> >         org.restlet.component 
> >        +- org.restlet.connector 
> >            +- org.restlet 
> >                +- org.restlet.data 
> 
> +1 
> 
> >  - Most interfaces are gone, even Restlet, Filter, etc. But 
> don't worry they 
> > were replaced by equivalent classes. The advantage is 
> simplicity and 
> > extensibility (riskier to add methods to interfaces without 
> breaking code, 
> > unless you force people to use a base class). The only two 
> survivors are 
> > Resource and Representation, but I'm still considering this :) 
> 
> Hmmm I am not so sure about this move. I will have to play with the 
> API. I like interfaces. And I still am sceptical about Representation 
> extending Resource :) 
> 
> Do we really need to call that class Chainer :) how about 
> RestletChain ? 
> 
> >  - Factorized the enumeration and related classes in 
> org.restlet.data into a 
> > single class with static constants. This vastly reduces the 
> number of 
> > artifacts to learn and deal with. 
> 
> I have to review them. 
> 
> I just looked at the Protocol class. So everytime restlet supports a 
> new protocol someone needs to update 1. the constants and 2. the 
> create method. Not Good.  And why does Protocol extend MetaData ? 
> 
> > Here are the other things I'm considering: 
> >  - Add an org.restlet.util (or helper) package with all the 
> wrapper and 
> > abstract classes, plus the EmptyValue class. 
> 
> +1 for org.restlet.util 
> 
> -1 EmptyValue do we really really need a marker interface, 
> maybe there 
> is some method that all Value objects must implement? 
> 
> +1   to moving  wrapper and abstract classes iff the package 
> dependencies look like 
> 
> org.restlet.component 
>    +- org.restlet.connector 
>       +- org.restlet 
>          +- org.restlet.data 
>             +-org.restlet.util 
> 
> >  - Make the Restlet class and subclasses generic again (for Call 
> > subclasses). 
> 
> No Comment Yet (NCY) 
> 
> >  - Make the Preference class generic (for Metadata 
> subclasses) and remove 
> > all the other *Pref classes which add nothing more than 
> casting to the 
> > correct Metadata subclass. 
> 
> NCY 
> 
> >  - Adding an org.restlet.spi package and put the Factory 
> class in it, but 
> > hide it from the Javadocs. 
> 
> +20 :) -1 hiding it in the Javadocs 
> 
> >  - Make all classes, except those intended to be 
> subclasses, as final. Which 
> > ones? 
> 
> Hmmm ... usually immutable classes are very good candidates and 
> classes that only act as data stores .. 
> 
> >  - Make classes whose instances don't need to be modified 
> as immutable 
> > (members are final). 
> 
> +1 
> 
> So those were my first votes and comments. On the whole it is a very 
> encouraging step to be reviewing the API now rather than after 1.0 
> final is out. 
> 
> Cheers 
> Piyush 
> 
> 

Reply via email to