Yes, that would solve the problem.  Although I have to wonder, how is
this any better than having a public constructor?

Jeff

On Thu, Apr 1, 2010 at 10:08 AM, Max Ross (Google)
<maxr+appeng...@google.com> wrote:
> Hi Jeff,
>
> Note that DatastoreServiceConfig exposes a withDefaults() method.
> FetchOptions has one too but it's package protected.  We didn't expose it
> because FetchOptions isn't required for many low level datastore calls and
> we didn't see why users would want to create one if they didn't plan to
> adjust the offset, the limit, the prefetch size, etc.  We didn't consider
> your use case though, and it makes perfect sense.  Unless there's some other
> aspect of the Builder pattern that is getting in your way that you have
> explained, I think we could easily address your concern if we exposed
> FetchOptions.withDefaults().  Is that right?
>
> Thanks,
> Max
>
>
> On Thu, Apr 1, 2010 at 3:07 AM, Jeff Schnitzer <j...@infohazard.org> wrote:
>>
>> This is a genuine, heartfelt plea:  The Builder pattern
>> (DatastoreServiceConfig, FetchOptions) makes code extra annoying when
>> layering an API on top of the low-level API.
>>
>> Let's say you are writing some code by hand that creates a
>> FetchOptions with a limit and an offset:
>>
>> FetchOptions opts = FetchOptions.Builder.withLimit(100).offset(20);
>>
>> Pretty straightforward when typing it out by hand, but the lack of
>> orthogonality between withLimit() and limit() is a PITA when you're
>> trying to automate the creation of a builder.  The problem is, you
>> can't start with a "blank" FetchOptions.  The result is we end up
>> writing lots of code like this:
>>
>> if (limit != null)
>> {
>>        if (opts == null)
>>                opts = FetchOptions.Builder.withLimit(limit);
>>        else
>>                opts = opts.limit(limit);
>> }
>>
>> This wouldn't be necessary if FetchOptions.Builder had a "create()"
>> method that would produce a blank FetchOptions.  Or if FetchOptions
>> had a public constructor.  Or if FetchOptions was an interface or even
>> a nonfinal class.
>>
>> I notice that DatastoreServiceConfig is following in the path of
>> FetchOptions.  My initial reaction was Noooooo!  :-)
>>
>> Thanks for listening,
>> Jeff
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Google App Engine for Java" group.
>> To post to this group, send email to
>> google-appengine-j...@googlegroups.com.
>> To unsubscribe from this group, send email to
>> google-appengine-java+unsubscr...@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/google-appengine-java?hl=en.
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Google App Engine for Java" group.
> To post to this group, send email to google-appengine-j...@googlegroups.com.
> To unsubscribe from this group, send email to
> google-appengine-java+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/google-appengine-java?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.

Reply via email to