Quick Question about Magritte
Lukas Renggli
renggli at iam.unibe.ch
Sat Oct 15 18:02:07 MEST 2005
> Ok, this seems to work, slight modification from yours to prevent
> the cascade accessor from being added more than once, otherwise
> every render built up long chains of cascading accessors, does this
> seem right? Also, any way to add a label or something to each
> group of fields?
Aha, I see the problem. Sorry, I didn't think that far in my first
example. It would be probably easier to copy the descriptions before
modifying them:
orderView := (anOrder description ***copy***
addAll: (anOrder billingAddress description collect: [ :each |
each ***copy*** accessor: (MACascadeAccessor
accessor: (MASelectorAccessor selector: #billingAddress)
next: each accessor) ]);
addAll: (anOrder shippingAddress description collect: [ :each |
each ***copy*** accessor: (MACascadeAccessor
accessor: (MASelectorAccessor selector: #shippingAddress)
next: each accessor) ]);
asComponentOn: anOrder) addValidatedForm: #(#update #cancel ).
I see that this is commonly used pattern, in fact I am using such
code quite a lot in our web-applications. I see two possibilities to
make this easier:
1. Introduce a method in MAContainer doing exactly what we saw above:
(anOrder description
flatten: (MASelectorAccessor selector: #billingAddress))
flatten: (MASelectorAccessor selector: #shippingAddress)
...
2. Introduce a special description doing the same:
Order>>descriptionBillingAddress
^ (MAComposedDescription selector: #billingAddress)
reference: Address description;
yourself.
Order>>descriptionShippingAddress
^ (MAComposedDescription selector: #shippingAddress)
reference: Address description;
yourself.
The first approach can lead to _duplicated_ code and tends to _waste_
memory. The problem with the second approach is that you have those
referenced objects _always_ in the description of Order, maybe you
don't want this. Probably we need both?
Any thoughts?
Lukas
--
Lukas Renggli
http://www.lukas-renggli.ch
More information about the SmallWiki
mailing list