On 21.06.2010, at 22:48, Mike Schrag wrote:

>> Good point.  I'd like to see this in Wonder.  Anything that makes the code 
>> shorter and easier to read is a good thing.
> "Booking.PERFORMANCE.PERFORMANCE_TYPE().NAME().valueInObject(myBooking)"
> I don't see how you can do this without generating an ERXKey subclass for 
> every type in the reachable type system for KVC ... I briefly experimented 
> with doing that early on, but it generates a TON of classes and I started to 
> get concerned about burning permgen space.

Yes, it does exactly that. It adds 4 classes for every entity, in addition to 
the two that already existed before. I think that's not too bad for having a 
nice syntax.

We have about 130 entities and permgen space hasn't been a problem so far.

> You also run into potentially weird problems when two frameworks use keys of 
> the same declared type, but generate their classes in different packages.

I'm not sure I understand. But we don't have that problem, as all our models 
are in one framework.

> I decided to opt for the .dot(..) method, instead, and just use ERXKeys for 
> with generics.

Yea, but that's so cumbersome to write. And no auto-completion, which is way 
cool :)


But anyway, all these generated classes are only for the automcompletion stuff 
and nice syntax. The type safety stuff also works with the dot() method and 
doesn't need these classes.

So instead of this:
  Booking.PERFORMANCE.PERFORMANCE_TYPE().NAME().valueInObject(myBooking)

you could use the dot() method:
  
Booking.PERFORMANCE.dot(Performance.PERFORMANCE_TYPE).dot(PerformanceType.NAME).valueInObject(myBooking)

and still have it return a String. Or:
  Booking.ITEMS.dot(Item.NAME).valueInObject(myBooking)

and it returns an NSArray<String>. Same for all the other examples.


Ah, and in my original email I forgot to mention one nice detail about how 
valueForKey() and takeValueForKey() handle to-many relations. As already 
mentioned:

  myBooking.valueForKey(Booking.ITEMS.NAME())

returns an NSArray<String>, but takeValueForKey() on the other hand

  myBooking.takeValueForKey(someString, Booking.ITEMS.NAME())

knows that it needs only a String argument. (yes, this too works with the dot() 
syntax)


Marc

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to