Re: Style question: Nicknames for deeply nested objects



On 30/01/2011 17:51, Gerald Britton wrote:
Hi all,

Today I was thinking about a problem I often encounter. Say that I
have (seems I often do!) a deeply nested object, by which I mean
object within object with object, etc.

For example:

x = some.deeply.nested.object.method(some.other.deeply.nested.object.value)

Well, that's extreme but I've worked with code approaching that level
of nested-ness. Now, consider two scenarios:

1. You need to call this thing many times with different arguments, so
you wind up with:

x = some.deeply.nested.object.method(some.other.deeply.nested.object.value1)
y = some.deeply.nested.object.method(some.other.deeply.nested.object.value2)
z = some.deeply.nested.object.method(some.other.deeply.nested.object.value3)

Neither. You should tell. Don't ask if you can avoid it.

Compare...

queen.getButter()

and
queen.dairymaid.alderney.getButter()

see http://www.timelessteacherstuff.com/readerstheater/KingsBreakfast.pdf

king doesn't care where or how the butter is brought. Neither should your code!

What are you doing with value1, value2 and value3 when you have them anyway? Stuffing them 3 levels deep into something else?

Stop writing procedural code, and write object oriented code instead!

If you you make some tell deeply.nested.object about other.deeply.nested.object it can fetch its own values, but it might be better
to have some tell other.deeply.nested.object about deeply.nested.object to it can issue the correct commands.

Then you tell some to do Somthing by writing

some.takeMeaningfullAction()

and it all happens "under the covers".

Regards

Ian
.