You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by "Waldhoff, Rodney" <rw...@us.britannica.com> on 2002/02/07 17:57:36 UTC

RE: [httpclient] API design, Cookie.getExpiryDate, Cookie.setExpi ryDate

Yeah, lots of good ideas in there, but performance and memory use should be
a priority as well.  (Funny, I'm usually on the other side of this
argument.)

dIon makes a good point with the Collections example (list.get(1).setFoo(x);
changes the value in list); and frankly I think it's fairly unreasonable
clients to treat the Cookie.getDate() value as mutable (or, to put it
another way, I think it's perfectly reasonable to tell them to treat it as
immutable).  It's not like a desire or reason to change that value leaps out
at you.

I guess I don't mind making the defensive copy as much as I mind committing
ourselves to making the defensive copy if it turns out to be a performance
or footprint issue (and it seems to me that it likely will).  If we make a
defensive copy, we should still document that the object should be
considered immutable (which begs the question, why bother to make the copy?)

-----Original Message-----
From: Sean C. Sullivan [mailto:sean@seansullivan.com]
Sent: Thursday, February 07, 2002 10:33 AM
To: Jakarta Commons Developers List
Subject: Re: [httpclient] API design, Cookie.getExpiryDate,
Cookie.setExpiryDate



My comments are below...

From: "dIon Gillard" <di...@multitask.com.au>
> Sean C. Sullivan wrote:
>
> >I updated the code for the HttpClient:
> >
> >        Cookie.java
> >        TestCookie.java
> >
> >
> >The modification changes the behavior of Cookie.getExpiryDate
> >
> >Instead of returning the internal Date object, we return a freshly
> >instantiated Date object.
> >
> >Why:    Because java.util.Date is a mutable object.
> >
> >I created the patch files using this command:
> >
> >             cvs diff -c Foo.java > Foo.patch
> >
> > -Sean
> >
>
> I'm not sure that the original behaviour is flawed as coded.
>
> The patch implies that passing setExpiryDate a Date object and then
> changing that object is a 'bad thing'. But this is the existing
> behaviour, so under the current code, I can do this:
> // uncompiled untested code
> Date d = new Date();
> cookie.setExpiryDate(d);
> d.setTime(System.currentTimeMillis());
>
> and based on the current code set, I expect the expiry date of the
> cookie to have changed. And ditto, on calling getExpiryDate() I expect
> to be able to change the Date and have it reflected in the cookie.
>
> The patch is effectively a change in the implied contract between
httpclient
and the user....Comments?

I would like the HttpClient API to follow the API guidelines from Josh
Bloch's
book:

  Effective Java Programming Language Guide
   http://www.amazon.com/exec/obidos/ASIN/0201310058/


Josh Bloch is a Senior Software Architect at Sun.  Josh designed
the Java Collections API.

I highly recommend Josh's book.

In particular, I like these guidelines from Bloch's book:

==> Item 13:  Favor immutability  (immutable objects)

==> Item 12: Minimize the accessibility of classes and members

==> Item 6: Avoid finalizers

==> Item 21: Replace enum constructs with classes

==> Item 54: implement java.io.Serializable judiciously

==> Item 9:  Always override toString()

==> Item 10: Override clone judiciously

==> Item 15: Design and document for inheritance or else prohibit it

==> Item 17: Use interfaces only to define types

==> Item 23: Check parameters for validity

==> Item 24: Make defensive copies when needed

==> Item 25: Design method signatures carefully

==> Item 27: Return zero-length arrays, not nulls

==> Item 28: Write doc comments for all exposed API elements

==> Item 38: Adhere to generally accepted naming conventions

==> Item 47: Don't ignore exceptions


-Sean

--
To unsubscribe, e-mail:
<ma...@jakarta.apache.org>
For additional commands, e-mail:
<ma...@jakarta.apache.org>