> Yeah, I don't know if changing setXyz to *not* return 'void' would
> break things (like Tapestry). That would be a huge downer.
Just saw something cool at WOWODC. Instead of changing setXyz to return "this",
people would generate a Builder class for each Java class that has fluent
methods for every query:
Entity e = Entity.Builder
.attribute1("a")
.attribute2("b")
.rel1(someObject)
.rel2(someOtherOBject).
.build(context);
What may not be immediately obvious is that this also forces setting all
mandatory relationships ("build" method is only available on an object returned
from the last mandatory relationship method). I am not sure I personally have a
strong need for this API, but if you initialize your object on creation with
lots of attributes, this looks pretty neat actually.
Andrus
> On Oct 9, 2014, at 9:08 PM, Michael Gentry <[email protected]> wrote:
>
> Yeah, I don't know if changing setXyz to *not* return 'void' would
> break things (like Tapestry). That would be a huge downer.
>
> On Thu, Oct 9, 2014 at 3:03 PM, Andrus Adamchik <[email protected]>
> wrote:
>> I thought of that. Unfortunately "setXyz" is a 'java bean' setter, so we'll
>> be redefining one of the most established Java conventions.
>>
>> Andrus
>>
>> On Oct 9, 2014, at 2:51 PM, Michael Gentry <[email protected]> wrote:
>>
>>> I don't know if it will be confusing or not. At least with the
>>> current method names, I can type query.set[ctrl+space] and let Eclipse
>>> give me a list of set* method names to choose from (same applies for
>>> get*), but that option won't be available with the new chainable API.
>>> Part of me thinks just make setFetchLimit() return 'this' (at least
>>> where it makes sense to preserve existing API):
>>>
>>> query.setFetchLimit(100).setDistinct(true);
>>>
>>> You could continue that in the model objects, too:
>>>
>>> person.setFirstName("John").setLastName("Doe");
>>>
>>> mrg
>>>
>>>
>>> On Thu, Oct 9, 2014 at 1:31 PM, Andrus Adamchik <[email protected]>
>>> wrote:
>>>>
>>>> On Oct 7, 2014, at 9:30 PM, Michael Gentry <[email protected]> wrote:
>>>>
>>>>> On Tue, Oct 7, 2014 at 6:44 PM, Aristedes Maniatis <[email protected]>
>>>>> wrote:
>>>>>>> That said, if returning this is the direction we're going, then really
>>>>>>> all
>>>>>>> the currently void methods in SelectQuery should do the same thing -
>>>>>>> like
>>>>>>> addOrdering for example.
>>>>>>
>>>>>>
>>>>>> Correct, but we also need to gracefully deprecate the old methods and
>>>>>> make new fluent ones.
>>>>>
>>>>> I was looking at the changes and was wondering if we really need to
>>>>> deprecate the old methods. Can't setFetchLimit() live along with
>>>>> limit()?
>>>>
>>>> I suspect having both will be rather confusing. Initially I even wanted to
>>>> leave SelectQuery alone and implement all the new ideas in a separate
>>>> query class (ObjectQuery?), but since we've already made a bunch of
>>>> changes to SelectQuery in the same direction, I ended up with a massive
>>>> change to the existing class.
>>>>
>>>> Andrus
>>>>
>>>
>>
>